diff --git a/python/lsst/meas/algorithms/accumulator_mean_stack.py b/python/lsst/meas/algorithms/accumulator_mean_stack.py index d8676d34a..ffc5178cd 100644 --- a/python/lsst/meas/algorithms/accumulator_mean_stack.py +++ b/python/lsst/meas/algorithms/accumulator_mean_stack.py @@ -92,6 +92,22 @@ def __init__(self, shape, if self.compute_n_image: self.n_image = np.zeros(shape, dtype=np.int32) + def reset(self): + """Reset all accumulator arrays.""" + self.sum_weight[...] = 0 + self.sum_wdata[...] = 0 + if self.calc_error_from_input_variance: + self.sum_w2var[...] = 0 + else: + self.sum_weight2[...] = 0 + self.sum_wdata2[...] = 0 + self.or_mask[...] = 0 + for bit in self.mask_threshold_dict: + self.rejected_weights_by_bit[bit][...] = 0 + self.masked_pixels_mask[...] = 0 + if self.compute_n_image: + self.n_image[...] = 0 + def add_masked_image(self, masked_image, weight=1.0): """Add a masked image to the stack. diff --git a/python/lsst/meas/algorithms/detection.py b/python/lsst/meas/algorithms/detection.py index 4dc00ff56..01e51aa75 100644 --- a/python/lsst/meas/algorithms/detection.py +++ b/python/lsst/meas/algorithms/detection.py @@ -576,12 +576,12 @@ def applyThreshold(self, middle, bbox, factor=1.0, factorNeg=None): Convolved image to threshold. bbox : `lsst.geom.Box2I` Bounding box of unconvolved image. - factor : `float` + factor : `float`, optional Multiplier for the configured threshold. - factorNeg : `float` or `None` - Multiplier for the configured threshold for negative detection polarity. - If `None`, will be set equal to ``factor`` (i.e. equal to the factor used - for positive detection polarity). + factorNeg : `float` or `None`, optional + Multiplier for the configured threshold for negative detection + polarity. If `None`, will be set equal to ``factor`` (i.e. equal + to the factor used for positive detection polarity). Returns ------- @@ -595,16 +595,16 @@ def applyThreshold(self, middle, bbox, factor=1.0, factorNeg=None): Negative detection footprints, if configured. (`lsst.afw.detection.FootprintSet` or `None`) ``factor`` - Multiplier for the configured threshold. - (`float`) + Multiplier for the configured threshold for positive detection + polarity. (`float`) ``factorNeg`` - Multiplier for the configured threshold for negative detection polarity. - (`float`) + Multiplier for the configured threshold for negative detection + polarity. (`float`) """ if factorNeg is None: factorNeg = factor - self.log.info("Setting factor for negative detections equal to that for positive " - "detections: %f", factor) + self.log.info("Threshold scaling factor for positive detections is: %.3f. For negative " + "detections it is: %.3f", factor, factorNeg) results = pipeBase.Struct(positive=None, negative=None, factor=factor, factorNeg=factorNeg, positiveThreshold=None, negativeThreshold=None) # Detect the Footprints (peaks may be replaced if doTempLocalBackground) @@ -649,25 +649,31 @@ def finalizeFootprints(self, mask, results, sigma, factor=1.0, factorNeg=None, g ``negative`` entries; modified. sigma : `float` Gaussian sigma of PSF. - factor : `float` + factor : `float`, optional Multiplier for the configured threshold. Note that this is only used here for logging purposes. - factorNeg : `float` or `None` + factorNeg : `float` or `None`, optional Multiplier used for the negative detection polarity threshold. If `None`, a factor equal to ``factor`` (i.e. equal to the one used for positive detection polarity) is assumed. Note that this is only used here for logging purposes. + growOverride : `float` or `None`, optional + Override to use for ``nSigmaToGrow``, regardless of the value set + in ``config.nSigmaToGrow``. """ if growOverride is not None: self.log.warning("config.nSigmaToGrow is set to %.2f, but the caller has set " "growOverride to %.2f, so the footprints will be grown by " "%.2f sigma.", self.config.nSigmaToGrow, growOverride, growOverride) + nSigmaToGrow = growOverride + else: + nSigmaToGrow = self.config.nSigmaToGrow factorNeg = factor if factorNeg is None else factorNeg for polarity, maskName in (("positive", "DETECTED"), ("negative", "DETECTED_NEGATIVE")): fpSet = getattr(results, polarity) if fpSet is None: continue - if self.config.nSigmaToGrow > 0: + if nSigmaToGrow > 0: nGrow = int((self.config.nSigmaToGrow * sigma) + 0.5) self.metadata["nGrow"] = nGrow if self.config.combinedGrow: @@ -731,7 +737,8 @@ def reEstimateBackground(self, maskedImage, backgrounds, backgroundToPhotometric if self.config.adjustBackground: self.log.warning("Fiddling the background by %g", self.config.adjustBackground) bg += self.config.adjustBackground - self.log.info("Resubtracting the background after object detection") + self.log.info("Resubtracting the background after object detection (median background " + "value = %.2f)", np.median(bg.getImageF().array)) maskedImage -= bg.getImageF(self.background.config.algorithm, self.background.config.undersampleStyle) @@ -766,7 +773,7 @@ def clearUnwantedResults(self, mask, results): @timeMethod def detectFootprints(self, exposure, doSmooth=True, sigma=None, clearMask=True, expId=None, - background=None, backgroundToPhotometricRatio=None): + background=None, backgroundToPhotometricRatio=None, factor=1.0, factorNeg=None): """Detect footprints on an exposure. Parameters @@ -796,6 +803,13 @@ def detectFootprints(self, exposure, doSmooth=True, sigma=None, clearMask=True, Image to convert photometric-flattened image to background-flattened image if ``reEstimateBackground=True`` and exposure has been photometric-flattened. + factor : `float`, optional + Multiplier for the configured threshold for positive detection + polarity. + factorNeg : `float` or `None`, optional + Multiplier for the configured threshold for negative detection + polarity. If `None`, will be set equal to ``factor`` (i.e. equal + to the factor used for positive detection polarity). Returns ------- @@ -819,8 +833,11 @@ def detectFootprints(self, exposure, doSmooth=True, sigma=None, clearMask=True, if ``reEstimateBackground==False``. (`lsst.afw.math.BackgroundList`) ``factor`` - Multiplication factor applied to the configured detection - threshold. (`float`) + Multiplication factor applied to the configured threshold + for positive detection polarity. (`float`) + ``factorNeg`` + Multiplication factor applied to the configured threshold + for negative detection polarity. (`float`) """ maskedImage = exposure.maskedImage @@ -834,12 +851,12 @@ def detectFootprints(self, exposure, doSmooth=True, sigma=None, clearMask=True, sigma = convolveResults.sigma self.removeBadPixels(middle) - results = self.applyThreshold(middle, maskedImage.getBBox()) + results = self.applyThreshold(middle, maskedImage.getBBox(), factor=factor, factorNeg=factorNeg) results.background = background if background is not None else afwMath.BackgroundList() if self.config.doTempLocalBackground: self.applyTempLocalBackground(exposure, middle, results) - self.finalizeFootprints(maskedImage.mask, results, sigma) + self.finalizeFootprints(maskedImage.mask, results, sigma, factor=factor, factorNeg=factorNeg) # Compute the significance of peaks after the peaks have been # finalized and after local background correction/updatePeaks, so diff --git a/python/lsst/meas/algorithms/dynamicDetection.py b/python/lsst/meas/algorithms/dynamicDetection.py index 119408d99..be0858903 100644 --- a/python/lsst/meas/algorithms/dynamicDetection.py +++ b/python/lsst/meas/algorithms/dynamicDetection.py @@ -124,6 +124,9 @@ class DynamicDetectionConfig(SourceDetectionConfig): doBrightPrelimDetection = Field(dtype=bool, default=True, doc="Do initial bright detection pass where footprints are grown " "by brightGrowFactor?") + brightDetectionIterMax = Field(dtype=int, default=10, + doc="Maximum number of iterations in the initial bright detection " + "pass.") brightMultiplier = Field(dtype=float, default=2000.0, doc="Multiplier to apply to the prelimThresholdFactor for the " "\"bright\" detections stage (want this to be large to only " @@ -360,8 +363,10 @@ def calculateThreshold(self, exposure, seed, sigma=None, minFractionSourcesFacto badPixelMask = lsst.afw.image.Mask.getPlaneBitMask(["NO_DATA", "BAD"]) nGoodPix = np.sum(exposure.mask.array & badPixelMask == 0) if nGoodPix/nPix > 0.2: - detectedPixelMask = lsst.afw.image.Mask.getPlaneBitMask(["DETECTED", "DETECTED_NEGATIVE"]) - nDetectedPix = np.sum((exposure.mask.array & detectedPixelMask != 0) + detectedPosPixelMask = lsst.afw.image.Mask.getPlaneBitMask(["DETECTED"]) + detectedNegPixelMask = lsst.afw.image.Mask.getPlaneBitMask(["DETECTED_NEGATIVE"]) + nDetectedPix = np.sum(((exposure.mask.array & detectedPosPixelMask != 0) + | (exposure.mask.array & detectedNegPixelMask != 0)) & (exposure.mask.array & badPixelMask == 0)) msg += (" However, {} of {} ({:.3f}%) pixels are not marked NO_DATA or BAD, " "so there should be sufficient area to locate suitable sky sources. " @@ -481,10 +486,17 @@ def detectFootprints(self, exposure, doSmooth=True, sigma=None, clearMask=True, if self.config.doThresholdScaling: if self.config.doBrightPrelimDetection: - brightDetectedMask = self._computeBrightDetectionMask(maskedImage, convolveResults) + brightDetectedMask, brightFactorNeg = self._computeBrightDetectionMask( + maskedImage, convolveResults) + # Scale the factor for negative polarity detections based + # on what was required in the bright detection pass to + # avoid too many pixels marked as DETECTED_NEGATIVE (but + # capping it at 20.0 as a guardrail). + factorNeg = min(20.0, brightFactorNeg/self.config.brightNegFactor) else: prelim = None factor = 1.0 + factorNeg = 1.0 # seed needs to fit in a C++ 'int' so pybind doesn't choke on it seed = (expId if expId is not None else int(maskedImage.image.array.sum())) % (2**31 - 1) @@ -492,13 +504,14 @@ def detectFootprints(self, exposure, doSmooth=True, sigma=None, clearMask=True, middle = convolveResults.middle sigma = convolveResults.sigma if self.config.doThresholdScaling: + factorNeg *= self.config.prelimNegMultiplier*self.config.prelimThresholdFactor prelim = self.applyThreshold( middle, maskedImage.getBBox(), factor=self.config.prelimThresholdFactor, - factorNeg=self.config.prelimNegMultiplier*self.config.prelimThresholdFactor + factorNeg=factorNeg ) self.finalizeFootprints( maskedImage.mask, prelim, sigma, factor=self.config.prelimThresholdFactor, - factorNeg=self.config.prelimNegMultiplier*self.config.prelimThresholdFactor + factorNeg=factorNeg ) if self.config.doBrightPrelimDetection: # Combine prelim and bright detection masks for multiplier @@ -523,6 +536,8 @@ def detectFootprints(self, exposure, doSmooth=True, sigma=None, clearMask=True, factor = self.config.maxThresholdScaleFactor else: factor = threshResults.multiplicative + # Also scale the factor for negative polarity detections + factorNeg *= factor self.log.info("Modifying configured detection threshold by factor %.2f to %.2f", factor, factor*self.config.thresholdValue) @@ -536,12 +551,14 @@ def detectFootprints(self, exposure, doSmooth=True, sigma=None, clearMask=True, maskedImage.mask.array |= oldDetected # Rinse and repeat thresholding with new calculated threshold - results = self.applyThreshold(middle, maskedImage.getBBox(), factor) + results = self.applyThreshold( + middle, maskedImage.getBBox(), factor=factor, factorNeg=factorNeg + ) results.prelim = prelim results.background = background if background is not None else lsst.afw.math.BackgroundList() if self.config.doTempLocalBackground: self.applyTempLocalBackground(exposure, middle, results) - self.finalizeFootprints(maskedImage.mask, results, sigma, factor=factor, + self.finalizeFootprints(maskedImage.mask, results, sigma, factor=factor, factorNeg=factorNeg, growOverride=growOverride) if results.numPos == 0: msg = "No footprints were detected, so further processing would be moot" @@ -602,16 +619,34 @@ def detectFootprints(self, exposure, doSmooth=True, sigma=None, clearMask=True, try: self.clearMask(exposure.mask) convolveResults = self.convolveImage(maskedImage, psf, doSmooth=doSmooth) - tweakDetResults = self.applyThreshold(convolveResults.middle, maskedImage.getBBox(), factor) - self.finalizeFootprints(maskedImage.mask, tweakDetResults, sigma, factor=factor) + # Don't use factorNeg if the image has had its background + # subtracted after source detection. + tweakFactorNeg = None if self.config.reEstimateBackground else factorNeg + tweakDetResults = self.applyThreshold(convolveResults.middle, maskedImage.getBBox(), + factor=factor, factorNeg=tweakFactorNeg) + self.finalizeFootprints(maskedImage.mask, tweakDetResults, sigma, factor=factor, + factorNeg=tweakFactorNeg) bgLevel = self.calculateThreshold(exposure, seed, sigma=sigma, minFractionSourcesFactor=0.5, isBgTweak=True).additive - if self.config.minBackgroundTweak and bgLevel < self.config.minBackgroundTweak: - self.log.warning("Measured background tweak (%.2f) is outside [min, max] bounds " - "[%.2f, %.2f]. Setting tweak to lower limit: %.2f.", bgLevel, - self.config.minBackgroundTweak, self.config.maxBackgroundTweak, - self.config.minBackgroundTweak) - bgLevel = self.config.minBackgroundTweak + if self.config.minBackgroundTweak: + minBackgroundTweak = self.config.minBackgroundTweak + # Increase the minimum bg tweak allowed if the factorNeg indicates image + # was very oversubtracted. + if factorNeg > 5*factor: + if factorNeg > 8*factor: + minBackgroundTweak *= 3.0 + else: + minBackgroundTweak *= 2.0 + self.log.warning("All evidence suggests the image is very oversubtracted. " + "Allowing for a larger corection (%.2f), than that set in " + "config.minBackgroundTweak (%.2f).", minBackgroundTweak, + self.config.minBackgroundTweak) + if bgLevel < minBackgroundTweak: + self.log.warning("Measured background tweak (%.2f) is outside [min, max] bounds " + "[%.2f, %.2f]. Setting tweak to lower limit: %.2f.", bgLevel, + minBackgroundTweak, self.config.maxBackgroundTweak, + minBackgroundTweak) + bgLevel = minBackgroundTweak if self.config.maxBackgroundTweak and bgLevel > self.config.maxBackgroundTweak: self.log.warning("Measured background tweak (%.2f) is outside [min, max] bounds " "[%.2f, %.2f]. Setting tweak to upper limit: %.2f.", bgLevel, @@ -644,7 +679,7 @@ def tweakBackground(self, exposure, bgLevel, bgList=None): Constant background model. """ if bgLevel != 0.0: - self.log.info("Tweaking background by %f to match sky photometry", bgLevel) + self.log.info("Tweaking background by %.3f to match sky photometry", bgLevel) exposure.image -= bgLevel bgStats = lsst.afw.image.MaskedImageF(1, 1) bgStats.set(bgLevel, 0, bgLevel) @@ -660,12 +695,12 @@ def _computeBrightDetectionMask(self, maskedImage, convolveResults): Perform an initial bright object detection pass using a high detection threshold. The footprints in this pass are grown significantly more - than is typical to account for wings around bright sources. The + than is typical to account for wings around bright sources. The negative polarity detections in this pass help in masking severely over-subtracted regions. A maximum fraction of masked pixel from this pass is ensured via - the config ``brightMaskFractionMax``. If the masked pixel fraction is + the config ``brightMaskFractionMax``. If the masked pixel fraction is above this value, the detection thresholds here are increased by ``bisectFactor`` in a while loop until the detected masked fraction falls below this value. @@ -688,51 +723,85 @@ def _computeBrightDetectionMask(self, maskedImage, convolveResults): brightDetectedMask : `numpy.ndarray` Boolean array representing the union of the bright detection pass DETECTED and DETECTED_NEGATIVE masks. + brightFactorNeg : `float` + Factor applied to the threshold for negative polarity detections. + This can get altered significantly in background over-subtracted + images and is useful to know for subsequent steps in the dynamic + detection. """ # Initialize some parameters. - brightPosFactor = ( - self.config.prelimThresholdFactor*self.config.brightMultiplier/self.config.bisectFactor + brightFactorPos = ( + self.config.prelimThresholdFactor*self.config.brightMultiplier ) - brightNegFactor = self.config.brightNegFactor/self.config.bisectFactor - nPix = 1 - nPixDet = 1 - nPixDetNeg = 1 + brightFactorNeg = self.config.brightNegFactor brightMaskFractionMax = self.config.brightMaskFractionMax + # Set a lower max value tolerated for negative detection mask fraction. + brightMaskNegFractionMax = max(0.3, 0.75*brightMaskFractionMax) + + badPixelMask = lsst.afw.image.Mask.getPlaneBitMask(["NO_DATA", "BAD"]) + nGoodPix = np.sum(maskedImage.mask.array & badPixelMask == 0) # Loop until masked fraction is smaller than # brightMaskFractionMax, increasing the thresholds by # config.bisectFactor on each iteration (rarely necessary # for current defaults). - while nPixDetNeg/nPix > brightMaskFractionMax or nPixDet/nPix > brightMaskFractionMax: + for nIter in range(self.config.brightDetectionIterMax): self.clearMask(maskedImage.mask) - brightPosFactor *= self.config.bisectFactor - brightNegFactor *= self.config.bisectFactor prelimBright = self.applyThreshold(convolveResults.middle, maskedImage.getBBox(), - factor=brightPosFactor, factorNeg=brightNegFactor) + factor=brightFactorPos, factorNeg=brightFactorNeg) self.finalizeFootprints( maskedImage.mask, prelimBright, convolveResults.sigma*self.config.brightGrowFactor, - factor=brightPosFactor, factorNeg=brightNegFactor + factor=brightFactorPos, factorNeg=brightFactorNeg ) # Check that not too many pixels got masked. - nPix = maskedImage.mask.array.size - nPixDet = countMaskedPixels(maskedImage, "DETECTED") + detectedPosPixelMask = lsst.afw.image.Mask.getPlaneBitMask(["DETECTED"]) + detectedNegPixelMask = lsst.afw.image.Mask.getPlaneBitMask(["DETECTED_NEGATIVE"]) + badPixelMask = lsst.afw.image.Mask.getPlaneBitMask(["NO_DATA", "BAD"]) + nPixDetPos = np.sum((maskedImage.mask.array & detectedPosPixelMask != 0) + & (maskedImage.mask.array & badPixelMask == 0)) + nPixDetNeg = np.sum((maskedImage.mask.array & detectedNegPixelMask != 0) + & (maskedImage.mask.array & badPixelMask == 0)) self.log.info("Number (%) of bright DETECTED pix: {} ({:.1f}%)". - format(nPixDet, 100*nPixDet/nPix)) - nPixDetNeg = countMaskedPixels(maskedImage, "DETECTED_NEGATIVE") + format(nPixDetPos, 100*nPixDetPos/nGoodPix)) self.log.info("Number (%) of bright DETECTED_NEGATIVE pix: {} ({:.1f}%)". - format(nPixDetNeg, 100*nPixDetNeg/nPix)) - if nPixDetNeg/nPix > brightMaskFractionMax or nPixDet/nPix > brightMaskFractionMax: - self.log.warn("Too high a fraction (%.1f > %.1f) of pixels were masked with current " - "\"bright\" detection round thresholds. Increasing by a factor of %.2f " - "and trying again.", max(nPixDetNeg, nPixDet)/nPix, - brightMaskFractionMax, self.config.bisectFactor) + format(nPixDetNeg, 100*nPixDetNeg/nGoodPix)) + + if nPixDetPos/nGoodPix > brightMaskFractionMax or nPixDetNeg/nGoodPix > brightMaskNegFractionMax: + if nIter == self.config.brightDetectionIterMax - 1: + self.log.warning("Reached maximum number of iterations and still have too high " + "detected mask fractions in bright detection pass. Image is " + "likely mostly masked with BAD or NO_DATA or \"bad\" in some " + "other respect (so expected to likely fail further downstream).") + break + if nPixDetPos/nGoodPix > brightMaskFractionMax: + brightFactorPos *= self.config.bisectFactor + self.log.warning("Too high a fraction (%.2f > %.2f) of pixels were masked as " + "DETECTED with current \"bright\" detection round thresholds " + "(at nIter = %d). Increasing to a factor of %.2f and trying again.", + nPixDetPos/nGoodPix, brightMaskFractionMax, nIter, brightFactorPos) + if nPixDetNeg/nGoodPix > brightMaskNegFractionMax: + extraFactorNeg = 1.2 + if nPixDetNeg/nGoodPix > min(0.98, 1.25*brightMaskNegFractionMax): + if nIter == 0: + extraFactorNeg = 3.0 + elif nPixDetNeg/nGoodPix > 0.9999: + extraFactorNeg = 1.8 + else: + extraFactorNeg = 1.5 + brightFactorNeg *= self.config.bisectFactor*extraFactorNeg + self.log.warning("Too high a fraction (%.2f > %.2f) of pixels were masked as " + "DETECTED_NEGATIVE with current \"bright\" detection round thresholds " + "(at nIter = %d). Increasing to a factor of %.2f and trying again.", + nPixDetNeg/nGoodPix, brightMaskNegFractionMax, nIter, brightFactorNeg) + else: + break # Save the mask planes from the "bright" detection round, then # clear them before moving on to the "prelim" detection phase. brightDetectedMask = (maskedImage.mask.array & maskedImage.mask.getPlaneBitMask(["DETECTED", "DETECTED_NEGATIVE"])) self.clearMask(maskedImage.mask) - return brightDetectedMask + return brightDetectedMask, brightFactorNeg def countMaskedPixels(maskedIm, maskPlane): diff --git a/python/lsst/meas/algorithms/maskStreaks.py b/python/lsst/meas/algorithms/maskStreaks.py index 5f0afc8ad..5beaaec64 100644 --- a/python/lsst/meas/algorithms/maskStreaks.py +++ b/python/lsst/meas/algorithms/maskStreaks.py @@ -147,6 +147,7 @@ def __init__(self, data, weights, line=None, detectionMask=None): self.mask = (weights != 0) self._initLine = line + self.modelFailure = False self.setLineMask(line, maxStreakWidth=0, nSigmaMask=10, detectionMask=detectionMask) def getLineXY(self, line): @@ -227,6 +228,11 @@ def setLineMask(self, line, maxStreakWidth, nSigmaMask, logger=None, detectionMa # happens when, for example, the streak ends in the middle of # the image. lineEnds = self.getLineXY(line) + if lineEnds.size == 0: + if logger is not None: + logger.debug("Calculated line not contained in image bounding box") + self.modelFailure = True + return xA = lineEnds[0, 0] - self._xmax / 2. yA = lineEnds[0, 1] - self._ymax / 2. @@ -493,7 +499,13 @@ def line_search(c, dx): break dx = scipy.linalg.cho_solve(cholesky, b) - factor, fmin, _, _ = scipy.optimize.brent(line_search, args=(dx,), full_output=True, tol=0.05) + if abs(line_search(1, dx) - chi2) < 1e-12: + # Step size is too small for the brent line search to work well. + # Just use the step fit from the Cholesky solve. + factor = 1 + else: + factor, _, _, _ = scipy.optimize.brent(line_search, args=(dx,), full_output=True, tol=0.05) + x -= factor * dx if (abs(x[0]) > 1.5 * self._rhoMax) or (iter > maxIter): fitFailure = True @@ -889,7 +901,7 @@ def _fitProfile(self, lines, maskedImage, detectionMask=None): line.sigma = self.config.invSigma**-1 lineModel = LineProfile(data, weights, line=line, detectionMask=detectionMask) # Skip any lines that do not cover any data (sometimes happens because of chip gaps) - if lineModel.lineMask.sum() == 0: + if lineModel.modelFailure or lineModel.lineMask.sum() == 0: continue fit, fitFailure = lineModel.fit(dChi2Tol=self.config.dChi2Tolerance, log=self.log, @@ -915,6 +927,7 @@ def _fitProfile(self, lines, maskedImage, detectionMask=None): # Drop this line if the model profile is below the footprint # threshold if not finalLineMask.any(): + self.log.debug("Streak model profile is below the footprintThreshold.") continue fit.modelMaximum = finalModelMax lineFits.append(fit) diff --git a/src/Interp.cc b/src/Interp.cc index b568559f5..04f5d20e7 100644 --- a/src/Interp.cc +++ b/src/Interp.cc @@ -292,286 +292,286 @@ static void do_defects(std::vector const &badList, // list of bad switch (defectType) { case 02: /* .#?, = 0 */ val = 1.0000 * out2_1; - out[badX1] = (val < min) ? out2_1 : val; + out[badX1] = (!(val >= min)) ? out2_1 : val; break; case 06: /* .##, = 0 */ val = 1.4288 * out2_1 - 0.4288 * out2_2; - out[badX1] = (val < min) ? out2_1 : val; + out[badX1] = (!(val >= min)) ? out2_1 : val; break; case 014: /* ..##, = 0 */ val = 1.0933 * out2_1 - 0.0933 * out2_2; - out[badX0] = (val < min) ? out2_1 : val; + out[badX0] = (!(val >= min)) ? out2_1 : val; val = 1.4288 * out2_1 - 0.4288 * out2_2; - out[badX1] = (val < min) ? out2_1 : val; + out[badX1] = (!(val >= min)) ? out2_1 : val; break; case 04: /* ..#?, = 0 */ val = 1.000 * out2_1; - out[badX0] = (val < min) ? out2_1 : val; - out[badX1] = (val < min) ? out2_1 : val; + out[badX0] = (!(val >= min)) ? out2_1 : val; + out[badX1] = (!(val >= min)) ? out2_1 : val; break; case 030: /* ...##, = 0 */ val = 0.6968 * out2_1 + 0.3032 * out2_2; - out[badX0] = (val < min) ? out2_1 : val; + out[badX0] = (!(val >= min)) ? out2_1 : val; val = 1.0933 * out2_1 - 0.0933 * out2_2; - out[badX1 - 1] = (val < min) ? out2_1 : val; + out[badX1 - 1] = (!(val >= min)) ? out2_1 : val; val = 1.4288 * out2_1 - 0.4288 * out2_2; - out[badX1] = (val < min) ? out2_1 : val; + out[badX1] = (!(val >= min)) ? out2_1 : val; break; case 010: /* ...#?, = 0 */ val = 1.000 * out2_1; - out[badX0] = (val < min) ? out2_1 : val; - out[badX1 - 1] = (val < min) ? out2_1 : val; - out[badX1] = (val < min) ? out2_1 : val; + out[badX0] = (!(val >= min)) ? out2_1 : val; + out[badX1 - 1] = (!(val >= min)) ? out2_1 : val; + out[badX1] = (!(val >= min)) ? out2_1 : val; break; case 060: /* ....##, = 0 */ val = 0.5370 * out2_1 + 0.4630 * out2_2; - out[badX0] = (val < min) ? out2_1 : val; + out[badX0] = (!(val >= min)) ? out2_1 : val; val = 0.6968 * out2_1 + 0.3032 * out2_2; - out[badX0 + 1] = (val < min) ? out2_1 : val; + out[badX0 + 1] = (!(val >= min)) ? out2_1 : val; val = 1.0933 * out2_1 - 0.0933 * out2_2; - out[badX1 - 1] = (val < min) ? out2_1 : val; + out[badX1 - 1] = (!(val >= min)) ? out2_1 : val; val = 1.4288 * out2_1 - 0.4288 * out2_2; - out[badX1] = (val < min) ? out2_1 : val; + out[badX1] = (!(val >= min)) ? out2_1 : val; break; case 020: /* ....#?, = 0 */ val = 1.0000 * out2_1; - out[badX0] = (val < min) ? out2_1 : val; - out[badX0 + 1] = (val < min) ? out2_1 : val; - out[badX1 - 1] = (val < min) ? out2_1 : val; - out[badX1] = (val < min) ? out2_1 : val; + out[badX0] = (!(val >= min)) ? out2_1 : val; + out[badX0 + 1] = (!(val >= min)) ? out2_1 : val; + out[badX1 - 1] = (!(val >= min)) ? out2_1 : val; + out[badX1] = (!(val >= min)) ? out2_1 : val; break; case 0140: /* .....##, = 0 */ val = 0.5041 * out2_1 + 0.4959 * out2_2; - out[badX0] = (val < min) ? out2_1 : val; + out[badX0] = (!(val >= min)) ? out2_1 : val; val = 0.5370 * out2_1 + 0.4630 * out2_2; - out[badX0 + 1] = (val < min) ? out2_1 : val; + out[badX0 + 1] = (!(val >= min)) ? out2_1 : val; val = 0.6968 * out2_1 + 0.3032 * out2_2; - out[badX1 - 2] = (val < min) ? out2_1 : val; + out[badX1 - 2] = (!(val >= min)) ? out2_1 : val; val = 1.0933 * out2_1 - 0.0933 * out2_2; - out[badX1 - 1] = (val < min) ? out2_1 : val; + out[badX1 - 1] = (!(val >= min)) ? out2_1 : val; val = 1.4288 * out2_1 - 0.4288 * out2_2; - out[badX1] = (val < min) ? out2_1 : val; + out[badX1] = (!(val >= min)) ? out2_1 : val; break; case 040: /* .....#?, = 0 */ val = 1.0000 * out2_1; - out[badX0] = (val < min) ? out2_1 : val; - out[badX0 + 1] = (val < min) ? out2_1 : val; - out[badX1 - 2] = (val < min) ? out2_1 : val; - out[badX1 - 1] = (val < min) ? out2_1 : val; - out[badX1] = (val < min) ? out2_1 : val; + out[badX0] = (!(val >= min)) ? out2_1 : val; + out[badX0 + 1] = (!(val >= min)) ? out2_1 : val; + out[badX1 - 2] = (!(val >= min)) ? out2_1 : val; + out[badX1 - 1] = (!(val >= min)) ? out2_1 : val; + out[badX1] = (!(val >= min)) ? out2_1 : val; break; case 0300: /* ......##, = 0 */ val = 0.5003 * out2_1 + 0.4997 * out2_2; - out[badX0] = (val < min) ? out2_1 : val; + out[badX0] = (!(val >= min)) ? out2_1 : val; val = 0.5041 * out2_1 + 0.4959 * out2_2; - out[badX0 + 1] = (val < min) ? out2_1 : val; + out[badX0 + 1] = (!(val >= min)) ? out2_1 : val; val = 0.5370 * out2_1 + 0.4630 * out2_2; - out[badX0 + 2] = (val < min) ? out2_1 : val; + out[badX0 + 2] = (!(val >= min)) ? out2_1 : val; val = 0.6968 * out2_1 + 0.3032 * out2_2; - out[badX1 - 2] = (val < min) ? out2_1 : val; + out[badX1 - 2] = (!(val >= min)) ? out2_1 : val; val = 1.0933 * out2_1 - 0.0933 * out2_2; - out[badX1 - 1] = (val < min) ? out2_1 : val; + out[badX1 - 1] = (!(val >= min)) ? out2_1 : val; val = 1.4288 * out2_1 - 0.4288 * out2_2; - out[badX1] = (val < min) ? out2_1 : val; + out[badX1] = (!(val >= min)) ? out2_1 : val; break; case 0100: /* ......#?, = 0 */ val = 1.0000 * out2_1; - out[badX0] = (val < min) ? out2_1 : val; - out[badX0 + 1] = (val < min) ? out2_1 : val; - out[badX0 + 2] = (val < min) ? out2_1 : val; - out[badX1 - 2] = (val < min) ? out2_1 : val; - out[badX1 - 1] = (val < min) ? out2_1 : val; - out[badX1] = (val < min) ? out2_1 : val; + out[badX0] = (!(val >= min)) ? out2_1 : val; + out[badX0 + 1] = (!(val >= min)) ? out2_1 : val; + out[badX0 + 2] = (!(val >= min)) ? out2_1 : val; + out[badX1 - 2] = (!(val >= min)) ? out2_1 : val; + out[badX1 - 1] = (!(val >= min)) ? out2_1 : val; + out[badX1] = (!(val >= min)) ? out2_1 : val; break; case 0600: /* .......##, = 0 */ val = 0.5000 * out2_1 + 0.5000 * out2_2; - out[badX0] = (val < min) ? out2_1 : val; + out[badX0] = (!(val >= min)) ? out2_1 : val; val = 0.5003 * out2_1 + 0.4997 * out2_2; - out[badX0 + 1] = (val < min) ? out2_1 : val; + out[badX0 + 1] = (!(val >= min)) ? out2_1 : val; val = 0.5041 * out2_1 + 0.4959 * out2_2; - out[badX0 + 2] = (val < min) ? out2_1 : val; + out[badX0 + 2] = (!(val >= min)) ? out2_1 : val; val = 0.5370 * out2_1 + 0.4630 * out2_2; - out[badX1 - 3] = (val < min) ? out2_1 : val; + out[badX1 - 3] = (!(val >= min)) ? out2_1 : val; val = 0.6968 * out2_1 + 0.3032 * out2_2; - out[badX1 - 2] = (val < min) ? out2_1 : val; + out[badX1 - 2] = (!(val >= min)) ? out2_1 : val; val = 1.0933 * out2_1 - 0.0933 * out2_2; - out[badX1 - 1] = (val < min) ? out2_1 : val; + out[badX1 - 1] = (!(val >= min)) ? out2_1 : val; val = 1.4288 * out2_1 - 0.4288 * out2_2; - out[badX1] = (val < min) ? out2_1 : val; + out[badX1] = (!(val >= min)) ? out2_1 : val; break; case 0200: /* .......#?, = 0 */ val = 1.0000 * out2_1; - out[badX0] = (val < min) ? out2_1 : val; - out[badX0 + 1] = (val < min) ? out2_1 : val; - out[badX0 + 2] = (val < min) ? out2_1 : val; - out[badX1 - 3] = (val < min) ? out2_1 : val; - out[badX1 - 2] = (val < min) ? out2_1 : val; - out[badX1 - 1] = (val < min) ? out2_1 : val; - out[badX1] = (val < min) ? out2_1 : val; + out[badX0] = (!(val >= min)) ? out2_1 : val; + out[badX0 + 1] = (!(val >= min)) ? out2_1 : val; + out[badX0 + 2] = (!(val >= min)) ? out2_1 : val; + out[badX1 - 3] = (!(val >= min)) ? out2_1 : val; + out[badX1 - 2] = (!(val >= min)) ? out2_1 : val; + out[badX1 - 1] = (!(val >= min)) ? out2_1 : val; + out[badX1] = (!(val >= min)) ? out2_1 : val; break; case 01400: /* ........##, = 0 */ val = 0.5000 * out2_1 + 0.5000 * out2_2; - out[badX0] = (val < min) ? out2_1 : val; + out[badX0] = (!(val >= min)) ? out2_1 : val; val = 0.5000 * out2_1 + 0.5000 * out2_2; - out[badX0 + 1] = (val < min) ? out2_1 : val; + out[badX0 + 1] = (!(val >= min)) ? out2_1 : val; val = 0.5003 * out2_1 + 0.4997 * out2_2; - out[badX0 + 2] = (val < min) ? out2_1 : val; + out[badX0 + 2] = (!(val >= min)) ? out2_1 : val; val = 0.5041 * out2_1 + 0.4959 * out2_2; - out[badX0 + 3] = (val < min) ? out2_1 : val; + out[badX0 + 3] = (!(val >= min)) ? out2_1 : val; val = 0.5370 * out2_1 + 0.4630 * out2_2; - out[badX1 - 3] = (val < min) ? out2_1 : val; + out[badX1 - 3] = (!(val >= min)) ? out2_1 : val; val = 0.6968 * out2_1 + 0.3032 * out2_2; - out[badX1 - 2] = (val < min) ? out2_1 : val; + out[badX1 - 2] = (!(val >= min)) ? out2_1 : val; val = 1.0933 * out2_1 - 0.0933 * out2_2; - out[badX1 - 1] = (val < min) ? out2_1 : val; + out[badX1 - 1] = (!(val >= min)) ? out2_1 : val; val = 1.4288 * out2_1 - 0.4288 * out2_2; - out[badX1] = (val < min) ? out2_1 : val; + out[badX1] = (!(val >= min)) ? out2_1 : val; break; case 0400: /* ........#?, = 0 */ val = 1.0000 * out2_1; - out[badX0] = (val < min) ? out2_1 : val; - out[badX0 + 1] = (val < min) ? out2_1 : val; - out[badX0 + 2] = (val < min) ? out2_1 : val; - out[badX0 + 3] = (val < min) ? out2_1 : val; - out[badX1 - 3] = (val < min) ? out2_1 : val; - out[badX1 - 2] = (val < min) ? out2_1 : val; - out[badX1 - 1] = (val < min) ? out2_1 : val; - out[badX1] = (val < min) ? out2_1 : val; + out[badX0] = (!(val >= min)) ? out2_1 : val; + out[badX0 + 1] = (!(val >= min)) ? out2_1 : val; + out[badX0 + 2] = (!(val >= min)) ? out2_1 : val; + out[badX0 + 3] = (!(val >= min)) ? out2_1 : val; + out[badX1 - 3] = (!(val >= min)) ? out2_1 : val; + out[badX1 - 2] = (!(val >= min)) ? out2_1 : val; + out[badX1 - 1] = (!(val >= min)) ? out2_1 : val; + out[badX1] = (!(val >= min)) ? out2_1 : val; break; case 03000: /* .........##, = 0 */ val = 0.5000 * out2_1 + 0.5000 * out2_2; - out[badX0] = (val < min) ? out2_1 : val; + out[badX0] = (!(val >= min)) ? out2_1 : val; val = 0.5000 * out2_1 + 0.5000 * out2_2; - out[badX0 + 1] = (val < min) ? out2_1 : val; + out[badX0 + 1] = (!(val >= min)) ? out2_1 : val; val = 0.5000 * out2_1 + 0.5000 * out2_2; - out[badX0 + 2] = (val < min) ? out2_1 : val; + out[badX0 + 2] = (!(val >= min)) ? out2_1 : val; val = 0.5003 * out2_1 + 0.4997 * out2_2; - out[badX0 + 3] = (val < min) ? out2_1 : val; + out[badX0 + 3] = (!(val >= min)) ? out2_1 : val; val = 0.5041 * out2_1 + 0.4959 * out2_2; - out[badX1 - 4] = (val < min) ? out2_1 : val; + out[badX1 - 4] = (!(val >= min)) ? out2_1 : val; val = 0.5370 * out2_1 + 0.4630 * out2_2; - out[badX1 - 3] = (val < min) ? out2_1 : val; + out[badX1 - 3] = (!(val >= min)) ? out2_1 : val; val = 0.6968 * out2_1 + 0.3032 * out2_2; - out[badX1 - 2] = (val < min) ? out2_1 : val; + out[badX1 - 2] = (!(val >= min)) ? out2_1 : val; val = 1.0933 * out2_1 - 0.0933 * out2_2; - out[badX1 - 1] = (val < min) ? out2_1 : val; + out[badX1 - 1] = (!(val >= min)) ? out2_1 : val; val = 1.4288 * out2_1 - 0.4288 * out2_2; - out[badX1] = (val < min) ? out2_1 : val; + out[badX1] = (!(val >= min)) ? out2_1 : val; break; case 01000: /* .........#?, = 0 */ val = 1.0000 * out2_1; - out[badX0] = (val < min) ? out2_1 : val; - out[badX0 + 1] = (val < min) ? out2_1 : val; - out[badX0 + 2] = (val < min) ? out2_1 : val; - out[badX0 + 3] = (val < min) ? out2_1 : val; - out[badX1 - 4] = (val < min) ? out2_1 : val; - out[badX1 - 3] = (val < min) ? out2_1 : val; - out[badX1 - 2] = (val < min) ? out2_1 : val; - out[badX1 - 1] = (val < min) ? out2_1 : val; - out[badX1] = (val < min) ? out2_1 : val; + out[badX0] = (!(val >= min)) ? out2_1 : val; + out[badX0 + 1] = (!(val >= min)) ? out2_1 : val; + out[badX0 + 2] = (!(val >= min)) ? out2_1 : val; + out[badX0 + 3] = (!(val >= min)) ? out2_1 : val; + out[badX1 - 4] = (!(val >= min)) ? out2_1 : val; + out[badX1 - 3] = (!(val >= min)) ? out2_1 : val; + out[badX1 - 2] = (!(val >= min)) ? out2_1 : val; + out[badX1 - 1] = (!(val >= min)) ? out2_1 : val; + out[badX1] = (!(val >= min)) ? out2_1 : val; break; case 06000: /* ..........##, = 0 */ val = 0.5000 * out2_1 + 0.5000 * out2_2; - out[badX0] = (val < min) ? out2_1 : val; + out[badX0] = (!(val >= min)) ? out2_1 : val; val = 0.5000 * out2_1 + 0.5000 * out2_2; - out[badX0 + 1] = (val < min) ? out2_1 : val; + out[badX0 + 1] = (!(val >= min)) ? out2_1 : val; val = 0.5000 * out2_1 + 0.5000 * out2_2; - out[badX0 + 2] = (val < min) ? out2_1 : val; + out[badX0 + 2] = (!(val >= min)) ? out2_1 : val; val = 0.5000 * out2_1 + 0.5000 * out2_2; - out[badX0 + 3] = (val < min) ? out2_1 : val; + out[badX0 + 3] = (!(val >= min)) ? out2_1 : val; val = 0.5003 * out2_1 + 0.4997 * out2_2; - out[badX0 + 4] = (val < min) ? out2_1 : val; + out[badX0 + 4] = (!(val >= min)) ? out2_1 : val; val = 0.5041 * out2_1 + 0.4959 * out2_2; - out[badX1 - 4] = (val < min) ? out2_1 : val; + out[badX1 - 4] = (!(val >= min)) ? out2_1 : val; val = 0.5370 * out2_1 + 0.4630 * out2_2; - out[badX1 - 3] = (val < min) ? out2_1 : val; + out[badX1 - 3] = (!(val >= min)) ? out2_1 : val; val = 0.6968 * out2_1 + 0.3032 * out2_2; - out[badX1 - 2] = (val < min) ? out2_1 : val; + out[badX1 - 2] = (!(val >= min)) ? out2_1 : val; val = 1.0933 * out2_1 - 0.0933 * out2_2; - out[badX1 - 1] = (val < min) ? out2_1 : val; + out[badX1 - 1] = (!(val >= min)) ? out2_1 : val; val = 1.4288 * out2_1 - 0.4288 * out2_2; - out[badX1] = (val < min) ? out2_1 : val; + out[badX1] = (!(val >= min)) ? out2_1 : val; break; case 02000: /* ..........#?, = 0 */ val = 1.0000 * out2_1; - out[badX0] = (val < min) ? out2_1 : val; - out[badX0 + 1] = (val < min) ? out2_1 : val; - out[badX0 + 2] = (val < min) ? out2_1 : val; - out[badX0 + 3] = (val < min) ? out2_1 : val; - out[badX0 + 4] = (val < min) ? out2_1 : val; - out[badX1 - 4] = (val < min) ? out2_1 : val; - out[badX1 - 3] = (val < min) ? out2_1 : val; - out[badX1 - 2] = (val < min) ? out2_1 : val; - out[badX1 - 1] = (val < min) ? out2_1 : val; - out[badX1] = (val < min) ? out2_1 : val; + out[badX0] = (!(val >= min)) ? out2_1 : val; + out[badX0 + 1] = (!(val >= min)) ? out2_1 : val; + out[badX0 + 2] = (!(val >= min)) ? out2_1 : val; + out[badX0 + 3] = (!(val >= min)) ? out2_1 : val; + out[badX0 + 4] = (!(val >= min)) ? out2_1 : val; + out[badX1 - 4] = (!(val >= min)) ? out2_1 : val; + out[badX1 - 3] = (!(val >= min)) ? out2_1 : val; + out[badX1 - 2] = (!(val >= min)) ? out2_1 : val; + out[badX1 - 1] = (!(val >= min)) ? out2_1 : val; + out[badX1] = (!(val >= min)) ? out2_1 : val; break; default: @@ -599,7 +599,7 @@ static void do_defects(std::vector const &badList, // list of bad switch (defectType) { case 02: /* ?#., = 0 */ val = 1.0000 * out2_1; - val = (val < min) ? out2_1 : val; + val = (!(val >= min)) ? out2_1 : val; for (int j = badX0; j <= badX1; j++) { out[j] = val; @@ -607,7 +607,7 @@ static void do_defects(std::vector const &badList, // list of bad break; case 03: /* ?##, = 0 */ val = 0.5000 * out2_1 + 0.5000 * out2_2; - if (val < min) { + if (!(val >= min)) { val = out2_1; } @@ -616,22 +616,22 @@ static void do_defects(std::vector const &badList, // list of bad } val = 0.5003 * out2_1 + 0.4997 * out2_2; - out[badX1 - 5] = (val < min) ? out2_1 : val; + out[badX1 - 5] = (!(val >= min)) ? out2_1 : val; val = 0.5041 * out2_1 + 0.4959 * out2_2; - out[badX1 - 4] = (val < min) ? out2_1 : val; + out[badX1 - 4] = (!(val >= min)) ? out2_1 : val; val = 0.5370 * out2_1 + 0.4630 * out2_2; - out[badX1 - 3] = (val < min) ? out2_1 : val; + out[badX1 - 3] = (!(val >= min)) ? out2_1 : val; val = 0.6968 * out2_1 + 0.3032 * out2_2; - out[badX1 - 2] = (val < min) ? out2_1 : val; + out[badX1 - 2] = (!(val >= min)) ? out2_1 : val; val = 1.0933 * out2_1 - 0.0933 * out2_2; - out[badX1 - 1] = (val < min) ? out2_1 : val; + out[badX1 - 1] = (!(val >= min)) ? out2_1 : val; val = 1.4288 * out2_1 - 0.4288 * out2_2; - out[badX1] = (val < min) ? out2_1 : val; + out[badX1] = (!(val >= min)) ? out2_1 : val; break; default: @@ -649,187 +649,187 @@ static void do_defects(std::vector const &badList, // list of bad switch (defectType) { case 06: /* ##., = 0 */ val = -0.4288 * out1_2 + 1.4288 * out1_1; - out[badX1] = (val < min) ? out1_1 : val; + out[badX1] = (!(val >= min)) ? out1_1 : val; break; case 014: /* ##.., = 0 */ val = -0.4288 * out1_2 + 1.4288 * out1_1; - out[badX0] = (val < min) ? out1_1 : val; + out[badX0] = (!(val >= min)) ? out1_1 : val; val = -0.0933 * out1_2 + 1.0933 * out1_1; - out[badX1] = (val < min) ? out1_1 : val; + out[badX1] = (!(val >= min)) ? out1_1 : val; break; case 030: /* ##..., = 0 */ val = -0.4288 * out1_2 + 1.4288 * out1_1; - out[badX0] = (val < min) ? out1_1 : val; + out[badX0] = (!(val >= min)) ? out1_1 : val; val = -0.0933 * out1_2 + 1.0933 * out1_1; - out[badX1 - 1] = (val < min) ? out1_1 : val; + out[badX1 - 1] = (!(val >= min)) ? out1_1 : val; val = 0.3032 * out1_2 + 0.6968 * out1_1; - out[badX1] = (val < min) ? out1_1 : val; + out[badX1] = (!(val >= min)) ? out1_1 : val; break; case 060: /* ##...., = 0 */ val = -0.4288 * out1_2 + 1.4288 * out1_1; - out[badX0] = (val < min) ? out1_1 : val; + out[badX0] = (!(val >= min)) ? out1_1 : val; val = -0.0933 * out1_2 + 1.0933 * out1_1; - out[badX0 + 1] = (val < min) ? out1_1 : val; + out[badX0 + 1] = (!(val >= min)) ? out1_1 : val; val = 0.3032 * out1_2 + 0.6968 * out1_1; - out[badX1 - 1] = (val < min) ? out1_1 : val; + out[badX1 - 1] = (!(val >= min)) ? out1_1 : val; val = 0.4630 * out1_2 + 0.5370 * out1_1; - out[badX1] = (val < min) ? out1_1 : val; + out[badX1] = (!(val >= min)) ? out1_1 : val; break; case 0140: /* ##....., = 0 */ val = -0.4288 * out1_2 + 1.4288 * out1_1; - out[badX0] = (val < min) ? out1_1 : val; + out[badX0] = (!(val >= min)) ? out1_1 : val; val = -0.0933 * out1_2 + 1.0933 * out1_1; - out[badX0 + 1] = (val < min) ? out1_1 : val; + out[badX0 + 1] = (!(val >= min)) ? out1_1 : val; val = 0.3032 * out1_2 + 0.6968 * out1_1; - out[badX1 - 2] = (val < min) ? out1_1 : val; + out[badX1 - 2] = (!(val >= min)) ? out1_1 : val; val = 0.4630 * out1_2 + 0.5370 * out1_1; - out[badX1 - 1] = (val < min) ? out1_1 : val; + out[badX1 - 1] = (!(val >= min)) ? out1_1 : val; val = 0.4959 * out1_2 + 0.5041 * out1_1; - out[badX1] = (val < min) ? out1_1 : val; + out[badX1] = (!(val >= min)) ? out1_1 : val; break; case 0300: /* ##......, = 0 */ val = -0.4288 * out1_2 + 1.4288 * out1_1; - out[badX0] = (val < min) ? out1_1 : val; + out[badX0] = (!(val >= min)) ? out1_1 : val; val = -0.0933 * out1_2 + 1.0933 * out1_1; - out[badX0 + 1] = (val < min) ? out1_1 : val; + out[badX0 + 1] = (!(val >= min)) ? out1_1 : val; val = 0.3032 * out1_2 + 0.6968 * out1_1; - out[badX0 + 2] = (val < min) ? out1_1 : val; + out[badX0 + 2] = (!(val >= min)) ? out1_1 : val; val = 0.4630 * out1_2 + 0.5370 * out1_1; - out[badX1 - 2] = (val < min) ? out1_1 : val; + out[badX1 - 2] = (!(val >= min)) ? out1_1 : val; val = 0.4959 * out1_2 + 0.5041 * out1_1; - out[badX1 - 1] = (val < min) ? out1_1 : val; + out[badX1 - 1] = (!(val >= min)) ? out1_1 : val; val = 0.4997 * out1_2 + 0.5003 * out1_1; - out[badX1] = (val < min) ? out1_1 : val; + out[badX1] = (!(val >= min)) ? out1_1 : val; break; case 0600: /* ##......., = 0 */ val = -0.4288 * out1_2 + 1.4288 * out1_1; - out[badX0] = (val < min) ? out1_1 : val; + out[badX0] = (!(val >= min)) ? out1_1 : val; val = -0.0933 * out1_2 + 1.0933 * out1_1; - out[badX0 + 1] = (val < min) ? out1_1 : val; + out[badX0 + 1] = (!(val >= min)) ? out1_1 : val; val = 0.3032 * out1_2 + 0.6968 * out1_1; - out[badX0 + 2] = (val < min) ? out1_1 : val; + out[badX0 + 2] = (!(val >= min)) ? out1_1 : val; val = 0.4630 * out1_2 + 0.5370 * out1_1; - out[badX1 - 3] = (val < min) ? out1_1 : val; + out[badX1 - 3] = (!(val >= min)) ? out1_1 : val; val = 0.4959 * out1_2 + 0.5041 * out1_1; - out[badX1 - 2] = (val < min) ? out1_1 : val; + out[badX1 - 2] = (!(val >= min)) ? out1_1 : val; val = 0.4997 * out1_2 + 0.5003 * out1_1; - out[badX1 - 1] = (val < min) ? out1_1 : val; + out[badX1 - 1] = (!(val >= min)) ? out1_1 : val; val = 0.5000 * out1_2 + 0.5000 * out1_1; - out[badX1] = (val < min) ? out1_1 : val; + out[badX1] = (!(val >= min)) ? out1_1 : val; break; case 01400: /* ##........, = 0 */ val = -0.4288 * out1_2 + 1.4288 * out1_1; - out[badX0] = (val < min) ? out1_1 : val; + out[badX0] = (!(val >= min)) ? out1_1 : val; val = -0.0933 * out1_2 + 1.0933 * out1_1; - out[badX0 + 1] = (val < min) ? out1_1 : val; + out[badX0 + 1] = (!(val >= min)) ? out1_1 : val; val = 0.3032 * out1_2 + 0.6968 * out1_1; - out[badX0 + 2] = (val < min) ? out1_1 : val; + out[badX0 + 2] = (!(val >= min)) ? out1_1 : val; val = 0.4630 * out1_2 + 0.5370 * out1_1; - out[badX0 + 3] = (val < min) ? out1_1 : val; + out[badX0 + 3] = (!(val >= min)) ? out1_1 : val; val = 0.4959 * out1_2 + 0.5041 * out1_1; - out[badX1 - 3] = (val < min) ? out1_1 : val; + out[badX1 - 3] = (!(val >= min)) ? out1_1 : val; val = 0.4997 * out1_2 + 0.5003 * out1_1; - out[badX1 - 2] = (val < min) ? out1_1 : val; + out[badX1 - 2] = (!(val >= min)) ? out1_1 : val; val = 0.5000 * out1_2 + 0.5000 * out1_1; - out[badX1 - 1] = (val < min) ? out1_1 : val; + out[badX1 - 1] = (!(val >= min)) ? out1_1 : val; val = 0.5000 * out1_2 + 0.5000 * out1_1; - out[badX1] = (val < min) ? out1_1 : val; + out[badX1] = (!(val >= min)) ? out1_1 : val; break; case 03000: /* ##........., = 0 */ val = -0.4288 * out1_2 + 1.4288 * out1_1; - out[badX0] = (val < min) ? out1_1 : val; + out[badX0] = (!(val >= min)) ? out1_1 : val; val = -0.0933 * out1_2 + 1.0933 * out1_1; - out[badX0 + 1] = (val < min) ? out1_1 : val; + out[badX0 + 1] = (!(val >= min)) ? out1_1 : val; val = 0.3032 * out1_2 + 0.6968 * out1_1; - out[badX0 + 2] = (val < min) ? out1_1 : val; + out[badX0 + 2] = (!(val >= min)) ? out1_1 : val; val = 0.4630 * out1_2 + 0.5370 * out1_1; - out[badX0 + 3] = (val < min) ? out1_1 : val; + out[badX0 + 3] = (!(val >= min)) ? out1_1 : val; val = 0.4959 * out1_2 + 0.5041 * out1_1; - out[badX1 - 4] = (val < min) ? out1_1 : val; + out[badX1 - 4] = (!(val >= min)) ? out1_1 : val; val = 0.4997 * out1_2 + 0.5003 * out1_1; - out[badX1 - 3] = (val < min) ? out1_1 : val; + out[badX1 - 3] = (!(val >= min)) ? out1_1 : val; val = 0.5000 * out1_2 + 0.5000 * out1_1; - out[badX1 - 2] = (val < min) ? out1_1 : val; + out[badX1 - 2] = (!(val >= min)) ? out1_1 : val; val = 0.5000 * out1_2 + 0.5000 * out1_1; - out[badX1 - 1] = (val < min) ? out1_1 : val; + out[badX1 - 1] = (!(val >= min)) ? out1_1 : val; val = 0.5000 * out1_2 + 0.5000 * out1_1; - out[badX1] = (val < min) ? out1_1 : val; + out[badX1] = (!(val >= min)) ? out1_1 : val; break; case 06000: /* ##.........., = 0 */ val = -0.4288 * out1_2 + 1.4288 * out1_1; - out[badX0] = (val < min) ? out1_1 : val; + out[badX0] = (!(val >= min)) ? out1_1 : val; val = -0.0933 * out1_2 + 1.0933 * out1_1; - out[badX0 + 1] = (val < min) ? out1_1 : val; + out[badX0 + 1] = (!(val >= min)) ? out1_1 : val; val = 0.3032 * out1_2 + 0.6968 * out1_1; - out[badX0 + 2] = (val < min) ? out1_1 : val; + out[badX0 + 2] = (!(val >= min)) ? out1_1 : val; val = 0.4630 * out1_2 + 0.5370 * out1_1; - out[badX0 + 3] = (val < min) ? out1_1 : val; + out[badX0 + 3] = (!(val >= min)) ? out1_1 : val; val = 0.4959 * out1_2 + 0.5041 * out1_1; - out[badX0 + 4] = (val < min) ? out1_1 : val; + out[badX0 + 4] = (!(val >= min)) ? out1_1 : val; val = 0.4997 * out1_2 + 0.5003 * out1_1; - out[badX1 - 4] = (val < min) ? out1_1 : val; + out[badX1 - 4] = (!(val >= min)) ? out1_1 : val; val = 0.5000 * out1_2 + 0.5000 * out1_1; - out[badX1 - 3] = (val < min) ? out1_1 : val; + out[badX1 - 3] = (!(val >= min)) ? out1_1 : val; val = 0.5000 * out1_2 + 0.5000 * out1_1; - out[badX1 - 2] = (val < min) ? out1_1 : val; + out[badX1 - 2] = (!(val >= min)) ? out1_1 : val; val = 0.5000 * out1_2 + 0.5000 * out1_1; - out[badX1 - 1] = (val < min) ? out1_1 : val; + out[badX1 - 1] = (!(val >= min)) ? out1_1 : val; val = 0.5000 * out1_2 + 0.5000 * out1_1; - out[badX1] = (val < min) ? out1_1 : val; + out[badX1] = (!(val >= min)) ? out1_1 : val; break; default: @@ -859,25 +859,25 @@ static void do_defects(std::vector const &badList, // list of bad switch (defectType) { case 03: /* ##?, S/N = infty */ val = -0.4288 * out1_2 + 1.4288 * out1_1; - out[badX0] = (val < min) ? out1_1 : val; + out[badX0] = (!(val >= min)) ? out1_1 : val; val = -0.0933 * out1_2 + 1.0933 * out1_1; - out[badX0 + 1] = (val < min) ? out1_1 : val; + out[badX0 + 1] = (!(val >= min)) ? out1_1 : val; val = 0.3032 * out1_2 + 0.6968 * out1_1; - out[badX0 + 2] = (val < min) ? out1_1 : val; + out[badX0 + 2] = (!(val >= min)) ? out1_1 : val; val = 0.4630 * out1_2 + 0.5370 * out1_1; - out[badX0 + 3] = (val < min) ? out1_1 : val; + out[badX0 + 3] = (!(val >= min)) ? out1_1 : val; val = 0.4959 * out1_2 + 0.5041 * out1_1; - out[badX0 + 4] = (val < min) ? out1_1 : val; + out[badX0 + 4] = (!(val >= min)) ? out1_1 : val; val = 0.4997 * out1_2 + 0.5003 * out1_1; - out[badX0 + 5] = (val < min) ? out1_1 : val; + out[badX0 + 5] = (!(val >= min)) ? out1_1 : val; val = 0.5000 * out1_2 + 0.5000 * out1_1; - val = (val < min) ? out1_1 : val; + val = (!(val >= min)) ? out1_1 : val; for (int j = badX0 + 6; j <= badX1; j++) { out[j] = val; @@ -913,12 +913,12 @@ static void do_defects(std::vector const &badList, // list of bad switch (defectType) { case 012: /* #.#., = 0, sigma = 1 */ val = 0.5000 * out1_1 + 0.5000 * out2_1; - out[badX1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; break; case 013: /* #.##, = 0 */ val = 0.4875 * out1_1 + 0.8959 * out2_1 - 0.3834 * out2_2; - out[badX1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; break; case 022: /* #..#., = 0, sigma = 1 */ @@ -931,834 +931,834 @@ static void do_defects(std::vector const &badList, // list of bad break; case 023: /* #..##, = 0 */ val = 0.7538 * out1_1 + 0.5680 * out2_1 - 0.3218 * out2_2; - out[badX0] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.3095 * out1_1 + 1.2132 * out2_1 - 0.5227 * out2_2; - out[badX1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; break; case 032: /* ##.#., = 0 */ val = -0.3834 * out1_2 + 0.8959 * out1_1 + 0.4875 * out2_1; - out[badX1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; break; case 033: /* ##.##, = 0 */ /* These coefficients are also available as interp::interp_1_c1 and interp::interp_1_c2 */ val = -0.2737 * out1_2 + 0.7737 * out1_1 + 0.7737 * out2_1 - 0.2737 * out2_2; - out[badX1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; break; case 042: /* #...#., = 0, sigma = 1 */ val = 0.8430 * out1_1 + 0.1570 * out2_1; - out[badX0] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.5000 * out1_1 + 0.5000 * out2_1; - out[badX1 - 1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.1570 * out1_1 + 0.8430 * out2_1; - out[badX1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; break; case 043: /* #...##, = 0 */ val = 0.8525 * out1_1 + 0.2390 * out2_1 - 0.0915 * out2_2; - out[badX0] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.5356 * out1_1 + 0.8057 * out2_1 - 0.3413 * out2_2; - out[badX1 - 1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.2120 * out1_1 + 1.3150 * out2_1 - 0.5270 * out2_2; - out[badX1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; break; case 062: /* ##..#., = 0 */ val = -0.5227 * out1_2 + 1.2132 * out1_1 + 0.3095 * out2_1; - out[badX0] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = -0.3218 * out1_2 + 0.5680 * out1_1 + 0.7538 * out2_1; - out[badX1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; break; case 063: /* ##..##, = 0 */ val = -0.4793 * out1_2 + 1.1904 * out1_1 + 0.5212 * out2_1 - 0.2323 * out2_2; - out[badX0] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = -0.2323 * out1_2 + 0.5212 * out1_1 + 1.1904 * out2_1 - 0.4793 * out2_2; - out[badX1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; break; case 0102: /* #....#., = 0, sigma = 1 */ val = 0.8810 * out1_1 + 0.1190 * out2_1; - out[badX0] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.6315 * out1_1 + 0.3685 * out2_1; - out[badX0 + 1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0 + 1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.3685 * out1_1 + 0.6315 * out2_1; - out[badX1 - 1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.1190 * out1_1 + 0.8810 * out2_1; - out[badX1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; break; case 0103: /* #....##, = 0 */ val = 0.8779 * out1_1 + 0.0945 * out2_1 + 0.0276 * out2_2; - out[badX0] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.6327 * out1_1 + 0.3779 * out2_1 - 0.0106 * out2_2; - out[badX0 + 1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0 + 1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.4006 * out1_1 + 0.8914 * out2_1 - 0.2920 * out2_2; - out[badX1 - 1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.1757 * out1_1 + 1.3403 * out2_1 - 0.5160 * out2_2; - out[badX1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; break; case 0142: /* ##...#., = 0 */ val = -0.5270 * out1_2 + 1.3150 * out1_1 + 0.2120 * out2_1; - out[badX0] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = -0.3413 * out1_2 + 0.8057 * out1_1 + 0.5356 * out2_1; - out[badX1 - 1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = -0.0915 * out1_2 + 0.2390 * out1_1 + 0.8525 * out2_1; - out[badX1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; break; case 0143: /* ##...##, = 0 */ val = -0.5230 * out1_2 + 1.3163 * out1_1 + 0.2536 * out2_1 - 0.0469 * out2_2; - out[badX0] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = -0.3144 * out1_2 + 0.8144 * out1_1 + 0.8144 * out2_1 - 0.3144 * out2_2; - out[badX1 - 1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = -0.0469 * out1_2 + 0.2536 * out1_1 + 1.3163 * out2_1 - 0.5230 * out2_2; - out[badX1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; break; case 0202: /* #.....#., = 0, sigma = 1 */ val = 0.8885 * out1_1 + 0.1115 * out2_1; - out[badX0] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.6748 * out1_1 + 0.3252 * out2_1; - out[badX0 + 1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0 + 1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.5000 * out1_1 + 0.5000 * out2_1; - out[badX1 - 2] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 2] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.3252 * out1_1 + 0.6748 * out2_1; - out[badX1 - 1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.1115 * out1_1 + 0.8885 * out2_1; - out[badX1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; break; case 0203: /* #.....##, = 0 */ val = 0.8824 * out1_1 + 0.0626 * out2_1 + 0.0549 * out2_2; - out[badX0] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.6601 * out1_1 + 0.2068 * out2_1 + 0.1331 * out2_2; - out[badX0 + 1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0 + 1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.4938 * out1_1 + 0.4498 * out2_1 + 0.0564 * out2_2; - out[badX1 - 2] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 2] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.3551 * out1_1 + 0.9157 * out2_1 - 0.2708 * out2_2; - out[badX1 - 1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.1682 * out1_1 + 1.3447 * out2_1 - 0.5129 * out2_2; - out[badX1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; break; case 0302: /* ##....#., = 0 */ val = -0.5160 * out1_2 + 1.3403 * out1_1 + 0.1757 * out2_1; - out[badX0] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = -0.2920 * out1_2 + 0.8914 * out1_1 + 0.4006 * out2_1; - out[badX0 + 1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0 + 1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = -0.0106 * out1_2 + 0.3779 * out1_1 + 0.6327 * out2_1; - out[badX1 - 1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.0276 * out1_2 + 0.0945 * out1_1 + 0.8779 * out2_1; - out[badX1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; break; case 0303: /* ##....##, = 0 */ val = -0.5197 * out1_2 + 1.3370 * out1_1 + 0.1231 * out2_1 + 0.0596 * out2_2; - out[badX0] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = -0.2924 * out1_2 + 0.8910 * out1_1 + 0.3940 * out2_1 + 0.0074 * out2_2; - out[badX0 + 1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0 + 1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.0074 * out1_2 + 0.3940 * out1_1 + 0.8910 * out2_1 - 0.2924 * out2_2; - out[badX1 - 1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.0596 * out1_2 + 0.1231 * out1_1 + 1.3370 * out2_1 - 0.5197 * out2_2; - out[badX1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; break; case 0402: /* #......#., = 0, sigma = 1 */ val = 0.8893 * out1_1 + 0.1107 * out2_1; - out[badX0] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.6830 * out1_1 + 0.3170 * out2_1; - out[badX0 + 1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0 + 1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.5435 * out1_1 + 0.4565 * out2_1; - out[badX0 + 2] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0 + 2] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.4565 * out1_1 + 0.5435 * out2_1; - out[badX1 - 2] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 2] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.3170 * out1_1 + 0.6830 * out2_1; - out[badX1 - 1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.1107 * out1_1 + 0.8893 * out2_1; - out[badX1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; break; case 0403: /* #......##, = 0 */ val = 0.8829 * out1_1 + 0.0588 * out2_1 + 0.0583 * out2_2; - out[badX0] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.6649 * out1_1 + 0.1716 * out2_1 + 0.1635 * out2_2; - out[badX0 + 1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0 + 1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.5212 * out1_1 + 0.2765 * out2_1 + 0.2024 * out2_2; - out[badX0 + 2] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0 + 2] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.4477 * out1_1 + 0.4730 * out2_1 + 0.0793 * out2_2; - out[badX1 - 2] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 2] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.3465 * out1_1 + 0.9201 * out2_1 - 0.2666 * out2_2; - out[badX1 - 1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.1673 * out1_1 + 1.3452 * out2_1 - 0.5125 * out2_2; - out[badX1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; break; case 0602: /* ##.....#., = 0 */ val = -0.5129 * out1_2 + 1.3447 * out1_1 + 0.1682 * out2_1; - out[badX0] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = -0.2708 * out1_2 + 0.9157 * out1_1 + 0.3551 * out2_1; - out[badX0 + 1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0 + 1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.0564 * out1_2 + 0.4498 * out1_1 + 0.4938 * out2_1; - out[badX1 - 2] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 2] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.1331 * out1_2 + 0.2068 * out1_1 + 0.6601 * out2_1; - out[badX1 - 1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.0549 * out1_2 + 0.0626 * out1_1 + 0.8824 * out2_1; - out[badX1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; break; case 0603: /* ##.....##, = 0 */ val = -0.5179 * out1_2 + 1.3397 * out1_1 + 0.0928 * out2_1 + 0.0854 * out2_2; - out[badX0] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = -0.2796 * out1_2 + 0.9069 * out1_1 + 0.2231 * out2_1 + 0.1495 * out2_2; - out[badX0 + 1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0 + 1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.0533 * out1_2 + 0.4467 * out1_1 + 0.4467 * out2_1 + 0.0533 * out2_2; - out[badX1 - 2] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 2] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.1495 * out1_2 + 0.2231 * out1_1 + 0.9069 * out2_1 - 0.2796 * out2_2; - out[badX1 - 1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.0854 * out1_2 + 0.0928 * out1_1 + 1.3397 * out2_1 - 0.5179 * out2_2; - out[badX1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; break; case 01002: /* #.......#., = 0, sigma = 1 */ val = 0.8894 * out1_1 + 0.1106 * out2_1; - out[badX0] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.6839 * out1_1 + 0.3161 * out2_1; - out[badX0 + 1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0 + 1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.5517 * out1_1 + 0.4483 * out2_1; - out[badX0 + 2] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0 + 2] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.5000 * out1_1 + 0.5000 * out2_1; - out[badX1 - 3] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 3] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.4483 * out1_1 + 0.5517 * out2_1; - out[badX1 - 2] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 2] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.3161 * out1_1 + 0.6839 * out2_1; - out[badX1 - 1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.1106 * out1_1 + 0.8894 * out2_1; - out[badX1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; break; case 01003: /* #.......##, = 0 */ val = 0.8829 * out1_1 + 0.0585 * out2_1 + 0.0585 * out2_2; - out[badX0] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.6654 * out1_1 + 0.1676 * out2_1 + 0.1670 * out2_2; - out[badX0 + 1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0 + 1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.5260 * out1_1 + 0.2411 * out2_1 + 0.2329 * out2_2; - out[badX0 + 2] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0 + 2] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.4751 * out1_1 + 0.2995 * out2_1 + 0.2254 * out2_2; - out[badX1 - 3] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 3] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.4390 * out1_1 + 0.4773 * out2_1 + 0.0836 * out2_2; - out[badX1 - 2] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 2] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.3456 * out1_1 + 0.9205 * out2_1 - 0.2661 * out2_2; - out[badX1 - 1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.1673 * out1_1 + 1.3452 * out2_1 - 0.5125 * out2_2; - out[badX1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; break; case 01402: /* ##......#., = 0 */ val = -0.5125 * out1_2 + 1.3452 * out1_1 + 0.1673 * out2_1; - out[badX0] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = -0.2666 * out1_2 + 0.9201 * out1_1 + 0.3465 * out2_1; - out[badX0 + 1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0 + 1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.0793 * out1_2 + 0.4730 * out1_1 + 0.4477 * out2_1; - out[badX0 + 2] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0 + 2] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.2024 * out1_2 + 0.2765 * out1_1 + 0.5212 * out2_1; - out[badX1 - 2] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 2] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.1635 * out1_2 + 0.1716 * out1_1 + 0.6649 * out2_1; - out[badX1 - 1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.0583 * out1_2 + 0.0588 * out1_1 + 0.8829 * out2_1; - out[badX1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; break; case 01403: /* ##......##, = 0 */ val = -0.5177 * out1_2 + 1.3400 * out1_1 + 0.0891 * out2_1 + 0.0886 * out2_2; - out[badX0] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = -0.2771 * out1_2 + 0.9095 * out1_1 + 0.1878 * out2_1 + 0.1797 * out2_2; - out[badX0 + 1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0 + 1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.0677 * out1_2 + 0.4614 * out1_1 + 0.2725 * out2_1 + 0.1984 * out2_2; - out[badX0 + 2] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0 + 2] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.1984 * out1_2 + 0.2725 * out1_1 + 0.4614 * out2_1 + 0.0677 * out2_2; - out[badX1 - 2] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 2] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.1797 * out1_2 + 0.1878 * out1_1 + 0.9095 * out2_1 - 0.2771 * out2_2; - out[badX1 - 1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.0886 * out1_2 + 0.0891 * out1_1 + 1.3400 * out2_1 - 0.5177 * out2_2; - out[badX1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; break; case 02002: /* #........#., = 0, sigma = 1 */ val = 0.8894 * out1_1 + 0.1106 * out2_1; - out[badX0] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.6839 * out1_1 + 0.3161 * out2_1; - out[badX0 + 1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0 + 1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.5526 * out1_1 + 0.4474 * out2_1; - out[badX0 + 2] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0 + 2] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.5082 * out1_1 + 0.4918 * out2_1; - out[badX0 + 3] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0 + 3] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.4918 * out1_1 + 0.5082 * out2_1; - out[badX1 - 3] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 3] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.4474 * out1_1 + 0.5526 * out2_1; - out[badX1 - 2] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 2] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.3161 * out1_1 + 0.6839 * out2_1; - out[badX1 - 1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.1106 * out1_1 + 0.8894 * out2_1; - out[badX1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; break; case 02003: /* #........##, = 0 */ val = 0.8829 * out1_1 + 0.0585 * out2_1 + 0.0585 * out2_2; - out[badX0] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.6654 * out1_1 + 0.1673 * out2_1 + 0.1673 * out2_2; - out[badX0 + 1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0 + 1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.5265 * out1_1 + 0.2370 * out2_1 + 0.2365 * out2_2; - out[badX0 + 2] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0 + 2] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.4799 * out1_1 + 0.2641 * out2_1 + 0.2560 * out2_2; - out[badX0 + 3] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0 + 3] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.4664 * out1_1 + 0.3038 * out2_1 + 0.2298 * out2_2; - out[badX1 - 3] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 3] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.4381 * out1_1 + 0.4778 * out2_1 + 0.0841 * out2_2; - out[badX1 - 2] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 2] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.3455 * out1_1 + 0.9206 * out2_1 - 0.2661 * out2_2; - out[badX1 - 1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.1673 * out1_1 + 1.3452 * out2_1 - 0.5125 * out2_2; - out[badX1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; break; case 03002: /* ##.......#., = 0 */ val = -0.5125 * out1_2 + 1.3452 * out1_1 + 0.1673 * out2_1; - out[badX0] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = -0.2661 * out1_2 + 0.9205 * out1_1 + 0.3456 * out2_1; - out[badX0 + 1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0 + 1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.0836 * out1_2 + 0.4773 * out1_1 + 0.4390 * out2_1; - out[badX0 + 2] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0 + 2] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.2254 * out1_2 + 0.2995 * out1_1 + 0.4751 * out2_1; - out[badX1 - 3] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 3] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.2329 * out1_2 + 0.2411 * out1_1 + 0.5260 * out2_1; - out[badX1 - 2] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 2] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.1670 * out1_2 + 0.1676 * out1_1 + 0.6654 * out2_1; - out[badX1 - 1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.0585 * out1_2 + 0.0585 * out1_1 + 0.8829 * out2_1; - out[badX1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; break; case 03003: /* ##.......##, = 0 */ val = -0.5177 * out1_2 + 1.3400 * out1_1 + 0.0889 * out2_1 + 0.0888 * out2_2; - out[badX0] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = -0.2768 * out1_2 + 0.9098 * out1_1 + 0.1838 * out2_1 + 0.1832 * out2_2; - out[badX0 + 1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0 + 1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.0703 * out1_2 + 0.4639 * out1_1 + 0.2370 * out2_1 + 0.2288 * out2_2; - out[badX0 + 2] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0 + 2] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.2130 * out1_2 + 0.2870 * out1_1 + 0.2870 * out2_1 + 0.2130 * out2_2; - out[badX1 - 3] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 3] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.2288 * out1_2 + 0.2370 * out1_1 + 0.4639 * out2_1 + 0.0703 * out2_2; - out[badX1 - 2] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 2] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.1832 * out1_2 + 0.1838 * out1_1 + 0.9098 * out2_1 - 0.2768 * out2_2; - out[badX1 - 1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.0888 * out1_2 + 0.0889 * out1_1 + 1.3400 * out2_1 - 0.5177 * out2_2; - out[badX1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; break; case 04002: /* #.........#., = 0 */ val = 0.8894 * out1_1 + 0.1106 * out2_1; - out[badX0] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.6839 * out1_1 + 0.3161 * out2_1; - out[badX0 + 1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0 + 1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.5527 * out1_1 + 0.4473 * out2_1; - out[badX0 + 2] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0 + 2] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.5091 * out1_1 + 0.4909 * out2_1; - out[badX0 + 3] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0 + 3] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.5000 * out1_1 + 0.5000 * out2_1; - out[badX1 - 4] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 4] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.4909 * out1_1 + 0.5091 * out2_1; - out[badX1 - 3] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 3] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.4473 * out1_1 + 0.5527 * out2_1; - out[badX1 - 2] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 2] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.3161 * out1_1 + 0.6839 * out2_1; - out[badX1 - 1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.1106 * out1_1 + 0.8894 * out2_1; - out[badX1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; break; case 04003: /* #.........##, = 0 */ val = 0.8829 * out1_1 + 0.0585 * out2_1 + 0.0585 * out2_2; - out[badX0] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.6654 * out1_1 + 0.1673 * out2_1 + 0.1673 * out2_2; - out[badX0 + 1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0 + 1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.5265 * out1_1 + 0.2368 * out2_1 + 0.2367 * out2_2; - out[badX0 + 2] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0 + 2] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.4804 * out1_1 + 0.2601 * out2_1 + 0.2595 * out2_2; - out[badX0 + 3] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0 + 3] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.4712 * out1_1 + 0.2685 * out2_1 + 0.2603 * out2_2; - out[badX1 - 4] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 4] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.4654 * out1_1 + 0.3043 * out2_1 + 0.2302 * out2_2; - out[badX1 - 3] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 3] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.4380 * out1_1 + 0.4778 * out2_1 + 0.0842 * out2_2; - out[badX1 - 2] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 2] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.3455 * out1_1 + 0.9206 * out2_1 - 0.2661 * out2_2; - out[badX1 - 1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.1673 * out1_1 + 1.3452 * out2_1 - 0.5125 * out2_2; - out[badX1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; break; case 06002: /* ##........#., = 0 */ val = -0.5125 * out1_2 + 1.3452 * out1_1 + 0.1673 * out2_1; - out[badX0] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = -0.2661 * out1_2 + 0.9206 * out1_1 + 0.3455 * out2_1; - out[badX0 + 1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0 + 1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.0841 * out1_2 + 0.4778 * out1_1 + 0.4381 * out2_1; - out[badX0 + 2] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0 + 2] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.2298 * out1_2 + 0.3038 * out1_1 + 0.4664 * out2_1; - out[badX0 + 3] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0 + 3] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.2560 * out1_2 + 0.2641 * out1_1 + 0.4799 * out2_1; - out[badX1 - 3] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 3] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.2365 * out1_2 + 0.2370 * out1_1 + 0.5265 * out2_1; - out[badX1 - 2] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 2] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.1673 * out1_2 + 0.1673 * out1_1 + 0.6654 * out2_1; - out[badX1 - 1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.0585 * out1_2 + 0.0585 * out1_1 + 0.8829 * out2_1; - out[badX1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; break; case 06003: /* ##........##, = 0 */ val = -0.5177 * out1_2 + 1.3400 * out1_1 + 0.0888 * out2_1 + 0.0888 * out2_2; - out[badX0] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = -0.2768 * out1_2 + 0.9098 * out1_1 + 0.1835 * out2_1 + 0.1835 * out2_2; - out[badX0 + 1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0 + 1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.0705 * out1_2 + 0.4642 * out1_1 + 0.2329 * out2_1 + 0.2324 * out2_2; - out[badX0 + 2] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0 + 2] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.2155 * out1_2 + 0.2896 * out1_1 + 0.2515 * out2_1 + 0.2434 * out2_2; - out[badX0 + 3] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0 + 3] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.2434 * out1_2 + 0.2515 * out1_1 + 0.2896 * out2_1 + 0.2155 * out2_2; - out[badX1 - 3] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 3] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.2324 * out1_2 + 0.2329 * out1_1 + 0.4642 * out2_1 + 0.0705 * out2_2; - out[badX1 - 2] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 2] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.1835 * out1_2 + 0.1835 * out1_1 + 0.9098 * out2_1 - 0.2768 * out2_2; - out[badX1 - 1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.0888 * out1_2 + 0.0888 * out1_1 + 1.3400 * out2_1 - 0.5177 * out2_2; - out[badX1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; break; case 010002: /* #..........#., = 0, sigma = 1 */ val = 0.8894 * out1_1 + 0.1106 * out2_1; - out[badX0] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.6839 * out1_1 + 0.3161 * out2_1; - out[badX0 + 1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0 + 1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.5527 * out1_1 + 0.4473 * out2_1; - out[badX0 + 2] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0 + 2] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.5092 * out1_1 + 0.4908 * out2_1; - out[badX0 + 3] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0 + 3] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.5009 * out1_1 + 0.4991 * out2_1; - out[badX0 + 4] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0 + 4] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.4991 * out1_1 + 0.5009 * out2_1; - out[badX1 - 4] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 4] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.4908 * out1_1 + 0.5092 * out2_1; - out[badX1 - 3] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 3] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.4473 * out1_1 + 0.5527 * out2_1; - out[badX1 - 2] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 2] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.3161 * out1_1 + 0.6839 * out2_1; - out[badX1 - 1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.1106 * out1_1 + 0.8894 * out2_1; - out[badX1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; break; case 010003: /* #..........##, = 0 */ val = 0.8829 * out1_1 + 0.0585 * out2_1 + 0.0585 * out2_2; - out[badX0] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.6654 * out1_1 + 0.1673 * out2_1 + 0.1673 * out2_2; - out[badX0 + 1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0 + 1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.5265 * out1_1 + 0.2367 * out2_1 + 0.2367 * out2_2; - out[badX0 + 2] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0 + 2] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.4804 * out1_1 + 0.2598 * out2_1 + 0.2598 * out2_2; - out[badX0 + 3] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0 + 3] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.4717 * out1_1 + 0.2644 * out2_1 + 0.2639 * out2_2; - out[badX0 + 4] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0 + 4] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.4703 * out1_1 + 0.2690 * out2_1 + 0.2608 * out2_2; - out[badX1 - 4] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 4] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.4654 * out1_1 + 0.3043 * out2_1 + 0.2303 * out2_2; - out[badX1 - 3] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 3] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.4380 * out1_1 + 0.4778 * out2_1 + 0.0842 * out2_2; - out[badX1 - 2] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 2] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.3455 * out1_1 + 0.9206 * out2_1 - 0.2661 * out2_2; - out[badX1 - 1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.1673 * out1_1 + 1.3452 * out2_1 - 0.5125 * out2_2; - out[badX1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; break; case 014002: /* ##.........#., = 0 */ val = -0.5125 * out1_2 + 1.3452 * out1_1 + 0.1673 * out2_1; - out[badX0] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = -0.2661 * out1_2 + 0.9206 * out1_1 + 0.3455 * out2_1; - out[badX0 + 1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0 + 1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.0842 * out1_2 + 0.4778 * out1_1 + 0.4380 * out2_1; - out[badX0 + 2] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0 + 2] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.2302 * out1_2 + 0.3043 * out1_1 + 0.4654 * out2_1; - out[badX0 + 3] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0 + 3] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.2603 * out1_2 + 0.2685 * out1_1 + 0.4712 * out2_1; - out[badX1 - 4] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 4] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.2595 * out1_2 + 0.2601 * out1_1 + 0.4804 * out2_1; - out[badX1 - 3] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 3] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.2367 * out1_2 + 0.2368 * out1_1 + 0.5265 * out2_1; - out[badX1 - 2] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 2] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.1673 * out1_2 + 0.1673 * out1_1 + 0.6654 * out2_1; - out[badX1 - 1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.0585 * out1_2 + 0.0585 * out1_1 + 0.8829 * out2_1; - out[badX1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; break; case 014003: /* ##.........##, = 0 */ val = -0.5177 * out1_2 + 1.3400 * out1_1 + 0.0888 * out2_1 + 0.0888 * out2_2; - out[badX0] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = -0.2768 * out1_2 + 0.9098 * out1_1 + 0.1835 * out2_1 + 0.1835 * out2_2; - out[badX0 + 1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0 + 1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.0705 * out1_2 + 0.4642 * out1_1 + 0.2326 * out2_1 + 0.2326 * out2_2; - out[badX0 + 2] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0 + 2] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.2158 * out1_2 + 0.2899 * out1_1 + 0.2474 * out2_1 + 0.2469 * out2_2; - out[badX0 + 3] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0 + 3] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.2459 * out1_2 + 0.2541 * out1_1 + 0.2541 * out2_1 + 0.2459 * out2_2; - out[badX1 - 4] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 4] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.2469 * out1_2 + 0.2474 * out1_1 + 0.2899 * out2_1 + 0.2158 * out2_2; - out[badX1 - 3] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 3] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.2326 * out1_2 + 0.2326 * out1_1 + 0.4642 * out2_1 + 0.0705 * out2_2; - out[badX1 - 2] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 2] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.1835 * out1_2 + 0.1835 * out1_1 + 0.9098 * out2_1 - 0.2768 * out2_2; - out[badX1 - 1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.0888 * out1_2 + 0.0888 * out1_1 + 1.3400 * out2_1 - 0.5177 * out2_2; - out[badX1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; break; case 020003: /* #...........##, = 0 */ val = 0.8829 * out1_1 + 0.0585 * out2_1 + 0.0585 * out2_2; - out[badX0] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.6654 * out1_1 + 0.1673 * out2_1 + 0.1673 * out2_2; - out[badX0 + 1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0 + 1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.5265 * out1_1 + 0.2367 * out2_1 + 0.2367 * out2_2; - out[badX0 + 2] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0 + 2] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.4804 * out1_1 + 0.2598 * out2_1 + 0.2598 * out2_2; - out[badX0 + 3] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0 + 3] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.4718 * out1_1 + 0.2641 * out2_1 + 0.2641 * out2_2; - out[badX0 + 4] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0 + 4] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.4708 * out1_1 + 0.2649 * out2_1 + 0.2644 * out2_2; - out[badX1 - 5] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 5] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.4702 * out1_1 + 0.2690 * out2_1 + 0.2608 * out2_2; - out[badX1 - 4] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 4] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.4654 * out1_1 + 0.3044 * out2_1 + 0.2303 * out2_2; - out[badX1 - 3] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 3] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.4380 * out1_1 + 0.4778 * out2_1 + 0.0842 * out2_2; - out[badX1 - 2] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 2] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.3455 * out1_1 + 0.9206 * out2_1 - 0.2661 * out2_2; - out[badX1 - 1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.1673 * out1_1 + 1.3452 * out2_1 - 0.5125 * out2_2; - out[badX1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; break; case 030002: /* ##..........#., = 0 */ val = -0.5125 * out1_2 + 1.3452 * out1_1 + 0.1673 * out2_1; - out[badX0] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = -0.2661 * out1_2 + 0.9206 * out1_1 + 0.3455 * out2_1; - out[badX0 + 1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0 + 1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.0842 * out1_2 + 0.4778 * out1_1 + 0.4380 * out2_1; - out[badX0 + 2] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0 + 2] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.2303 * out1_2 + 0.3043 * out1_1 + 0.4654 * out2_1; - out[badX0 + 3] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0 + 3] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.2608 * out1_2 + 0.2690 * out1_1 + 0.4703 * out2_1; - out[badX0 + 4] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0 + 4] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.2639 * out1_2 + 0.2644 * out1_1 + 0.4717 * out2_1; - out[badX1 - 4] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 4] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.2598 * out1_2 + 0.2598 * out1_1 + 0.4804 * out2_1; - out[badX1 - 3] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 3] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.2367 * out1_2 + 0.2367 * out1_1 + 0.5265 * out2_1; - out[badX1 - 2] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 2] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.1673 * out1_2 + 0.1673 * out1_1 + 0.6654 * out2_1; - out[badX1 - 1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.0585 * out1_2 + 0.0585 * out1_1 + 0.8829 * out2_1; - out[badX1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; break; case 030003: /* ##..........##, = 0 */ val = -0.5177 * out1_2 + 1.3400 * out1_1 + 0.0888 * out2_1 + 0.0888 * out2_2; - out[badX0] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = -0.2768 * out1_2 + 0.9098 * out1_1 + 0.1835 * out2_1 + 0.1835 * out2_2; - out[badX0 + 1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0 + 1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.0705 * out1_2 + 0.4642 * out1_1 + 0.2326 * out2_1 + 0.2326 * out2_2; - out[badX0 + 2] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0 + 2] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.2158 * out1_2 + 0.2899 * out1_1 + 0.2472 * out2_1 + 0.2471 * out2_2; - out[badX0 + 3] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0 + 3] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.2462 * out1_2 + 0.2544 * out1_1 + 0.2500 * out2_1 + 0.2495 * out2_2; - out[badX0 + 4] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0 + 4] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.2495 * out1_2 + 0.2500 * out1_1 + 0.2544 * out2_1 + 0.2462 * out2_2; - out[badX1 - 4] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 4] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.2471 * out1_2 + 0.2472 * out1_1 + 0.2899 * out2_1 + 0.2158 * out2_2; - out[badX1 - 3] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 3] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.2326 * out1_2 + 0.2326 * out1_1 + 0.4642 * out2_1 + 0.0705 * out2_2; - out[badX1 - 2] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 2] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.1835 * out1_2 + 0.1835 * out1_1 + 0.9098 * out2_1 - 0.2768 * out2_2; - out[badX1 - 1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.0888 * out1_2 + 0.0888 * out1_1 + 1.3400 * out2_1 - 0.5177 * out2_2; - out[badX1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; break; case 040003: /* #............##, = 0 */ val = 0.8829 * out1_1 + 0.0585 * out2_1 + 0.0585 * out2_2; - out[badX0] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.6654 * out1_1 + 0.1673 * out2_1 + 0.1673 * out2_2; - out[badX0 + 1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0 + 1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.5265 * out1_1 + 0.2367 * out2_1 + 0.2367 * out2_2; - out[badX0 + 2] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0 + 2] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.4804 * out1_1 + 0.2598 * out2_1 + 0.2598 * out2_2; - out[badX0 + 3] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0 + 3] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.4718 * out1_1 + 0.2641 * out2_1 + 0.2641 * out2_2; - out[badX0 + 4] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0 + 4] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.4708 * out1_1 + 0.2646 * out2_1 + 0.2646 * out2_2; - out[badX0 + 5] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0 + 5] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.4707 * out1_1 + 0.2649 * out2_1 + 0.2644 * out2_2; - out[badX1 - 5] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 5] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.4702 * out1_1 + 0.2690 * out2_1 + 0.2608 * out2_2; - out[badX1 - 4] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 4] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.4654 * out1_1 + 0.3044 * out2_1 + 0.2303 * out2_2; - out[badX1 - 3] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 3] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.4380 * out1_1 + 0.4778 * out2_1 + 0.0842 * out2_2; - out[badX1 - 2] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 2] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.3455 * out1_1 + 0.9206 * out2_1 - 0.2661 * out2_2; - out[badX1 - 1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.1673 * out1_1 + 1.3452 * out2_1 - 0.5125 * out2_2; - out[badX1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; break; case 060002: /* ##...........#., = 0 */ val = -0.5125 * out1_2 + 1.3452 * out1_1 + 0.1673 * out2_1; - out[badX0] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = -0.2661 * out1_2 + 0.9206 * out1_1 + 0.3455 * out2_1; - out[badX0 + 1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0 + 1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.0842 * out1_2 + 0.4778 * out1_1 + 0.4380 * out2_1; - out[badX0 + 2] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0 + 2] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.2303 * out1_2 + 0.3044 * out1_1 + 0.4654 * out2_1; - out[badX0 + 3] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0 + 3] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.2608 * out1_2 + 0.2690 * out1_1 + 0.4702 * out2_1; - out[badX0 + 4] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0 + 4] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.2644 * out1_2 + 0.2649 * out1_1 + 0.4708 * out2_1; - out[badX1 - 5] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 5] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.2641 * out1_2 + 0.2641 * out1_1 + 0.4718 * out2_1; - out[badX1 - 4] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 4] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.2598 * out1_2 + 0.2598 * out1_1 + 0.4804 * out2_1; - out[badX1 - 3] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 3] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.2367 * out1_2 + 0.2367 * out1_1 + 0.5265 * out2_1; - out[badX1 - 2] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 2] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.1673 * out1_2 + 0.1673 * out1_1 + 0.6654 * out2_1; - out[badX1 - 1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.0585 * out1_2 + 0.0585 * out1_1 + 0.8829 * out2_1; - out[badX1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; break; default: @@ -1818,22 +1818,22 @@ static void do_defects(std::vector const &badList, // list of bad switch (defectType) { case 06: /* #?#., = 0 */ val = 0.8894 * out1_1 + 0.1106 * out2_1; - out[badX0] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.6839 * out1_1 + 0.3161 * out2_1; - out[badX0 + 1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0 + 1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.5527 * out1_1 + 0.4473 * out2_1; - out[badX0 + 2] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0 + 2] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.5092 * out1_1 + 0.4908 * out2_1; - out[badX0 + 3] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0 + 3] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.5010 * out1_1 + 0.4990 * out2_1; - out[badX0 + 4] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0 + 4] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.5001 * out1_1 + 0.4999 * out2_1; - out[badX0 + 5] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0 + 5] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.5000 * out1_1 + 0.5000 * out2_1; @@ -1842,42 +1842,42 @@ static void do_defects(std::vector const &badList, // list of bad } val = 0.4999 * out1_1 + 0.5001 * out2_1; - out[badX1 - 5] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 5] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.4990 * out1_1 + 0.5010 * out2_1; - out[badX1 - 4] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 4] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.4908 * out1_1 + 0.5092 * out2_1; - out[badX1 - 3] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 3] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.4473 * out1_1 + 0.5527 * out2_1; - out[badX1 - 2] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 2] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.3161 * out1_1 + 0.6839 * out2_1; - out[badX1 - 1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.1106 * out1_1 + 0.8894 * out2_1; - out[badX1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; break; case 07: /* #?##, = 0 */ val = 0.8829 * out1_1 + 0.0585 * out2_1 + 0.0585 * out2_2; - out[badX0] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.6654 * out1_1 + 0.1673 * out2_1 + 0.1673 * out2_2; - out[badX0 + 1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0 + 1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.5265 * out1_1 + 0.2367 * out2_1 + 0.2367 * out2_2; - out[badX0 + 2] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0 + 2] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.4804 * out1_1 + 0.2598 * out2_1 + 0.2598 * out2_2; - out[badX0 + 3] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0 + 3] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.4718 * out1_1 + 0.2641 * out2_1 + 0.2641 * out2_2; - out[badX0 + 4] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0 + 4] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.4708 * out1_1 + 0.2646 * out2_1 + 0.2646 * out2_2; - out[badX0 + 5] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0 + 5] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.4707 * out[badX0 - 1] + 0.2646 * out[badX1 + 1] + 0.2646 * out[badX1 + 2]; @@ -1886,112 +1886,112 @@ static void do_defects(std::vector const &badList, // list of bad } val = 0.4707 * out1_1 + 0.2649 * out2_1 + 0.2644 * out2_2; - out[badX1 - 5] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 5] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.4702 * out1_1 + 0.2690 * out2_1 + 0.2608 * out2_2; - out[badX1 - 4] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 4] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.4654 * out1_1 + 0.3044 * out2_1 + 0.2303 * out2_2; - out[badX1 - 3] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 3] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.4380 * out1_1 + 0.4778 * out2_1 + 0.0842 * out2_2; - out[badX1 - 2] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 2] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.3455 * out1_1 + 0.9206 * out2_1 - 0.2661 * out2_2; - out[badX1 - 1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.1673 * out1_1 + 1.3452 * out2_1 - 0.5125 * out2_2; - out[badX1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; break; case 016: /* ##?#., = 0 */ val = -0.5125 * out1_2 + 1.3452 * out1_1 + 0.1673 * out2_1; - out[badX0] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = -0.2661 * out1_2 + 0.9206 * out1_1 + 0.3455 * out2_1; - out[badX0 + 1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0 + 1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.0842 * out1_2 + 0.4778 * out1_1 + 0.4380 * out2_1; - out[badX0 + 2] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0 + 2] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.2303 * out1_2 + 0.3044 * out1_1 + 0.4654 * out2_1; - out[badX0 + 3] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0 + 3] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.2608 * out1_2 + 0.2690 * out1_1 + 0.4702 * out2_1; - out[badX0 + 4] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0 + 4] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.2644 * out1_2 + 0.2649 * out1_1 + 0.4707 * out2_1; - out[badX0 + 5] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0 + 5] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.2646 * out1_2 + 0.2646 * out1_1 + 0.4707 * out2_1; - val = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + val = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; for (int j = badX0 + 6; j < badX1 - 5; j++) { out[j] = val; } val = 0.2646 * out1_2 + 0.2646 * out1_1 + 0.4708 * out2_1; - out[badX1 - 5] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 5] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.2641 * out1_2 + 0.2641 * out1_1 + 0.4718 * out2_1; - out[badX1 - 4] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 4] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.2598 * out1_2 + 0.2598 * out1_1 + 0.4804 * out2_1; - out[badX1 - 3] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 3] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.2367 * out1_2 + 0.2367 * out1_1 + 0.5265 * out2_1; - out[badX1 - 2] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 2] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.1673 * out1_2 + 0.1673 * out1_1 + 0.6654 * out2_1; - out[badX1 - 1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.0585 * out1_2 + 0.0585 * out1_1 + 0.8829 * out2_1; - out[badX1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; break; case 017: /* ##?##, S/N = infty */ val = -0.5177 * out1_2 + 1.3400 * out1_1 + 0.0888 * out2_1 + 0.0888 * out2_2; - out[badX0] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = -0.2768 * out1_2 + 0.9098 * out1_1 + 0.1835 * out2_1 + 0.1835 * out2_2; - out[badX0 + 1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0 + 1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.0705 * out1_2 + 0.4642 * out1_1 + 0.2326 * out2_1 + 0.2326 * out2_2; - out[badX0 + 2] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0 + 2] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.2158 * out1_2 + 0.2899 * out1_1 + 0.2472 * out2_1 + 0.2472 * out2_2; - out[badX0 + 3] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0 + 3] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.2462 * out1_2 + 0.2544 * out1_1 + 0.2497 * out2_1 + 0.2497 * out2_2; - out[badX0 + 4] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0 + 4] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.2497 * out1_2 + 0.2503 * out1_1 + 0.2500 * out2_1 + 0.2500 * out2_2; - out[badX0 + 5] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX0 + 5] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.2500 * out1_2 + 0.2500 * out1_1 + 0.2500 * out2_1 + 0.2500 * out2_2; - val = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + val = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; for (int j = badX0 + 6; j < badX1 - 5; j++) { out[j] = val; } val = 0.2500 * out1_2 + 0.2500 * out1_1 + 0.2503 * out2_1 + 0.2497 * out2_2; - out[badX1 - 5] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 5] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.2497 * out1_2 + 0.2497 * out1_1 + 0.2544 * out2_1 + 0.2462 * out2_2; - out[badX1 - 4] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 4] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.2472 * out1_2 + 0.2472 * out1_1 + 0.2899 * out2_1 + 0.2158 * out2_2; - out[badX1 - 3] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 3] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.2326 * out1_2 + 0.2326 * out1_1 + 0.4642 * out2_1 + 0.0705 * out2_2; - out[badX1 - 2] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 2] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.1835 * out1_2 + 0.1835 * out1_1 + 0.9098 * out2_1 - 0.2768 * out2_2; - out[badX1 - 1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1 - 1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; val = 0.0888 * out1_2 + 0.0888 * out1_1 + 1.3400 * out2_1 - 0.5177 * out2_2; - out[badX1] = (val < min) ? 0.5 * (out1_1 + out2_1) : val; + out[badX1] = (!(val >= min)) ? 0.5 * (out1_1 + out2_1) : val; break; default: diff --git a/tests/test_accumulator_mean_stack.py b/tests/test_accumulator_mean_stack.py index 2631a7d9b..7a302df44 100644 --- a/tests/test_accumulator_mean_stack.py +++ b/tests/test_accumulator_mean_stack.py @@ -239,6 +239,23 @@ def test_online_coadd_image(self): afw_masked_image.image.array[good_pixels], decimal=5) + # Reset the accumulator and do it all again. + stacker.reset() + for exposure, weight in zip(exposures, weights): + stacker.add_image(exposure.image, weight=weight) + + stacker.fill_stacked_image(coadd_exposure.image) + + online_image = coadd_exposure.image + + # The unmasked coadd good pixels should match at the <1e-5 level + # The masked pixels will not be correct for straight image stacking. + good_pixels = np.where(afw_masked_image.mask.array == 0) + + testing.assert_array_almost_equal(online_image.array[good_pixels], + afw_masked_image.image.array[good_pixels], + decimal=5) + class TestMemory(lsst.utils.tests.MemoryTestCase): pass diff --git a/tests/test_dynamicDetection.py b/tests/test_dynamicDetection.py index 97204e554..ddba7e033 100644 --- a/tests/test_dynamicDetection.py +++ b/tests/test_dynamicDetection.py @@ -5,7 +5,7 @@ from lsst.afw.geom import makeCdMatrix, makeSkyWcs from lsst.afw.table import SourceTable from lsst.geom import Box2I, Extent2I, Point2D, Point2I, SpherePoint, degrees -from lsst.meas.algorithms import DynamicDetectionTask +from lsst.meas.algorithms import DynamicDetectionTask, InsufficientSourcesError from lsst.meas.algorithms.testUtils import plantSources from lsst.pex.config import FieldValidationError @@ -110,6 +110,21 @@ def testThresholdScalingAndNoBackgroundTweak(self): config.doBackgroundTweak = False self.check(1.0, config) + def testBrightDetectionPass(self): + """Check that the maximum number of bright detection iterations is + observed. + + The bright detection loop is forced by setting config.brightMultiplier + so low such that the entire image is marked as DETECTED. As such, the + task is doomed to fail where it tries to lay down sky sources." + """ + config = DynamicDetectionTask.ConfigClass() + config.brightMultiplier = 0.05 + config.brightDetectionIterMax = 2 + with self.assertRaisesRegex( + InsufficientSourcesError, "Insufficient good sky source flux measurements"): + self.check(1.0, config) + def testThresholdsOutsideBounds(self): """Check that dynamic detection properly sets threshold limits. """