CurveFilter

MLModule

genre

Diagram

authors

Caroline Kuehnel, Tobias Block, Volker Dicken

package

FMEstable/ReleaseMeVis

dll

MLCurveUtils

definition

MLCurveUtils.def

see also

CurveGenerator, SoDiagram2D, BaseBypassOp, CurveProperties, CurveListConvert, CurveInfo

keywords

curve, diagram, filter, base, parser, differentiate, integrate, smooth, median, average, min, max, quantile, histogram, DVH, dose, volume, histogram, resample

Purpose

The module CurveFilter filters an input Curve by some criteria and generates a filtered copy as output.

Usage

Connect a plain Curve or CurveList to the input and select a filter mode. Use CurveListConvert to get alternative Curve data in a suitable format.

Windows

Default Panel

../../../Projects/MLCurveUtils/Modules/mhelp/Images/Screenshots/CurveFilter._default.png

Input Fields

inCurves

name: inCurves, type: MLBase

The input defines the input curve(s).

Use CurveGenerator and affiliated modules like ConcatenateCurve, CurveInfo, etc. for input.

Output Fields

outCurves

name: outCurves, type: MLBase

Filtered result curve(s).

Parameter Fields

Field Index

a =: Double

Debug Level: Integer

Percentage[%]: Double

Average Of Parameter: Double

Error: String

Process only limited interval: Bool

b =: Double

Expression: String

Range End: Double

Bin Size: Double

Filter Mode: Enum

Range Start: Double

c =: Double

Interpolation Mode: Enum

StdDev Of Parameter: Double

Constant Value: Double

Model Fitting Rel Center Of Drop Points: Bool

Step: Double

correctInvalidInterval: Bool

Num. Points: Integer

Strength: Double

d =: Double

Number Of Curve Points: Integer

Use index coordinates for range: Bool

Data To Process: Enum

Out Of Range Treatment: Enum

Use Step Function: Bool

Visible Fields

Debug Level

name: debugLevel, type: Integer, default: 0

Controls the verbosity of the module. Values > 0 will result in possibly many console output lines. Intended for debugging only.

Filter Mode

name: filterMode, type: Enum, default: Off

Defines the filter operation.

Values:

Title

Name

Description

Off

Off

Forwards a copy of the curve

Math. expression

Math. expression

Enter your own expression for filtering

Smooth

Smooth

Smoothing by using a moving average in a window of size 2 * Strength.

(CAVE this uses index number not world coordinates to determine the window width)

Differentiate

Differentiate

Numerical differentiation (compute quotient of differences)

Integrate

Integrate

Numerical integration (simple numerical integarion)

Average

Average

Compute flat curve at average. The average value for the first curve is written to field constCurveParam.

Hint: Similarly other constant values for a curve will be written to that field for some modes resulting in one value per curve.

Std Dev

StdDev

Compute flat curve at average

Median

Median

Compute local median (for a flat curve at median value use quantile with parameter 50%)

Resample

Resample

Does a crude resampling of the x range (CAVE: X Range may change due to resampling !)

Max

Max

Compute flat curve at max

Min

Min

Compute flat curve at min

Quantile

Quantile

Compute stated quantile of curve values. Constant curve at quantile parameter (stated in %)

Cumulated Histogram

CumulatedHistogram

Compute cumulated histogram curve (= integral normalized to 100%)

Inverse Cum Histogram

InverseCumHistogram

Compute inverse cumulated histogram curve (= 100% - integral normalized to 100%) (mode for things like dose-volume-histograms (DVH))

Max Pos

MaxPos

Curve values: (max-min) x delta( . - maxPos) Peak at leftmost maximum position. Position of max written to constCurveParam

Mean Pos

MeanPos

max - (max- min) x heavyside(. - meanPos) Change near mean position (X-grid points left of mean at max, above mean+1 at min, @ meanInx & meanIdx+1 at average (min,max)) Mean written to constCurveParam

Lower Drop Point

LowerDropPoint

Position below peak were value first falls below percentage of max value

Upper Drop Point

UpperDropPoint

Position above peak were value first falls below percentage of max value

Center Of Drop Points

CenterOfDropPoints

Middle position of the two drop points

Width At Drop Points

WidthAtDropPoints

Distance of the two drop points

Normalized Integral Curve

NormalizedIntegralCurve

Computes normalized curve whose Integral is 1

Normalized Height Curve

NormalizedHeightCurve

Computes normalized curve whose maximum height is 1

Hist Average

HistAverage

Assumes curve is a histogram and computes expected value / mean

Hist Std Dev

HistStdDev

Assumes curve is a histogram and computes std dev ( 1/N version)

Curvature

Curvature

Curvature = 1/ radius of circle fitted through each point and its neighbours (at distance selected by _fldSmoothStrength)

Histogram Bins

HistogramBins

Assumes curve is a histogram and re-samples it according to a given bin size

Zero Of Lower Tangent

ZeroOfLowerTangent

Find zero of approximate tangent defined as secant between lower drop point at percentage p and drop point at level p + (100%-p)/2

Zero Of Upper Tangent

ZeroOfUpperTangent

Find zero of approximate tangent defined as secant between upper drop point at percentage p and drop point at level p + (100%-p)/2

Zero Of Lower Secant

ZeroOfLowerSecant

Find zero of secant between lower drop point at percentage p and peak or center from drop points at level p

Zero Of Upper Secant

ZeroOfUpperSecant

Find zero of secant between upper drop point at percentage p and peak or center from drop points at level p

Lower Next Local Min

LowerNextLocalMin

Next local min left of peak with value below stated percentage of peak

Upper Next Local Min

UpperNextLocalMin

Next local min right of peak with value below stated percentage of peak

Zero Of Lower Parabola Fit

ZeroOfLowerParabolaFit

Find zero of parabola fit between lower drop point at percentage p and peak or center from drop points at level p

Zero Of Upper Parabola Fit

ZeroOfUpperParabolaFit

Find zero of parabola fit between upper drop point at percentage p and peak or center from drop points at level p

Count Non Zero Points

CountNonZeroPoints

Used e.g. to counts spikes in a histogram of upscaled integer images to revert the scaling

Max Non Zero Point

MaxNonZeroPoint

Used e.g. find range in a histogram

Min Non Zero Point

MinNonZeroPoint

Used e.g. find range in a histogram

Center Of Non Zero Range

CenterOfNonZeroRange

Used e.g. find center of range in a histogram

Width Of Non Zero Range

WidthOfNonZeroRange

Used e.g. find width of range in a histogram

Subtract Baseline

SubtractBaseline

Interpolation Mode

name: interpolationMode, type: Enum, default: CubicSpline

Defines the interpolation mode if the Filter Mode is Resample.

Values:

Title

Name

Constant

Constant

Linear

Linear

Quadratic

Quadratic

Cubic Spline

CubicSpline

Pw Cubic Hemite

PwCubicHemite

Centered Cubic

CenteredCubic

Process only limited interval

name: onlyProcessSubRange, type: Bool, default: FALSE, deprecated name: onlyProcessMarkedInterval

If checked, only a specific interval of the selected curves are filtered.

Out Of Range Treatment

name: outOfRangeTreatment, type: Enum, default: Copy

Describe what values will be filled outside of startIndex and endIndex when processing a limited range of the curve data.

Values:

Title

Name

Description

Copy

Copy

Default behaviour: just copy original curve values (for legacy reasons)

Fill Zeros

FillZeros

Might become future standard behavior

Fill Curve Min

FillCurveMin

Alternative std behavior ?

Fill Curve Max

FillCurveMax

Special purpose mode

Fill Const Curve Value

FillConstCurveValue

Could be reasonable choice for certain modes

Fill Range End Values

FillRangeEndValues

Most resonable choice for certain modes, e.g. integral

Range Start

name: rangeStart, type: Double, default: 0, deprecated name: markerStart

Sets the start index of the interval of curves to be filtered.

Range End

name: rangeEnd, type: Double, default: 0, deprecated name: markerEnd

Sets the end index of the interval of curves to be filtered.

Use index coordinates for range

name: rangeInIndexCoordinates, type: Bool, default: TRUE

If checked the range will be specified in curve index values instead of X axis coordinates (legacy mode, this is the way these parameters were interpreted in the first implementation).

Number Of Curve Points

name: numberOfCurvePoints, type: Integer, persistent: no

Provides number of grid positions as basic curve info.

Expression

name: parserExpression, type: String, default: x^2+2*x

Sets a mathematical expression for the Filter Mode Math. expression.

Data To Process

name: parserData, type: Enum, default: Y-Data

Defines in which dimension the data should be processed.

Values:

Title

Name

Description

X-Data

X-Data

Apply formula to parameter x

Y-Data

Y-Data

Apply formula to parameter y

XY-Data

XY-Data

Apply formula to parameter x and y

Error

name: parserErrorText, type: String

Shows an error message of the function parser.

a =

name: parserExtValueA, type: Double, default: 0

Sets one of four variables for use in the expression.

b =

name: parserExtValueB, type: Double, default: 0

Sets one of four variables for use in the expression.

c =

name: parserExtValueC, type: Double, default: 0

Sets one of four variables for use in the expression.

d =

name: parserExtValueD, type: Double, default: 0

Sets one of four variables for use in the expression.

Strength

name: smoothingStrength, type: Double, default: 10

Smoothing over that many curve points / distance (in # points). Also distance to take secants in curvature mode. (CAVE: This parameter is not then smoothing window width in X range, if x step != 1)

Num. Points

name: numResamplePoints, type: Integer, default: 10

Sets the number of target re-sample points.

Step

name: resampleInterval, type: Double, default: 1

Sets the step width for re-sampling.

Percentage[%]

name: percentage, type: Double, default: 50, minimum: 0, maximum: 100, deprecated name: quantilePercent

Percentage values used e.g. for drop points and quantile Some values possibly of interest related to normal distribution histograms:

For a Gaussian distribution the following theoretical values might be of relevance:

At 1.0 sigma drop to 60.65% with 68.27% inside and 15.87% each above resp. below (about 1 in 3 outside, 1 in 6 above/below) At 1.5 sigma drop to 32.45% with 86.64% inside and 6.68% each above resp. below (about 1 in 7 outside , 1 in 15 above/below) At 1.96 sigma drop to 14.65% with ~95.00% inside and 2.5% each above resp. below(about 1 in 20 outside , 1 in 40 above/below) At 2.0 sigma drop to 13.53% with 95.45% inside and 2.275% each above resp. below(about 1 in 22 outside , 1 in 44 above/below) At 2.5 sigma drop to 4.393% with 98.75807% inside and 0.62% each above resp. below (about 1 in 81 outside , 1 in 161 above/below) At 3.0 sigma drop to 1.111% with 99.733002% inside and 0.135% each above resp. below (about 1 in 370 outside , 1 in 741 above/below) At 3.5 sigma drop to 0.219% with 99.953474% inside and 0.0233% each above resp. below (about 1 in 2149 outside , 1 in 4298 above/below)

(source https://en.wikipedia.org/wiki/68%E2%80%9395%E2%80%9399.7_rule and value look up in gnuplot renderings of exp(-x*x/2) or erf(x/sqrt(2) )

20% above / below @ ~0.841262 sigma with drop to 70.197% (above/below ~70% drop level ~ 20%) 10% above / below @ ~1.28155 sigma with drop to 43.991% (above/below ~44% drop level ~ 10%) 5.0% above / below @ ~1.64485 sigma with drop to 25.85% (above/below ~26% drop level ~ 5%) 2.5% above / below @ ~1.959964 sigma with drop to 14.65% (above/below ~15% drop level ~ 2.5%) 2.0% above / below @ ~2.053749 sigma with drop to 12.137% (above/below ~12% drop level ~ 2.0%) 1.5% above / below @ ~2.170090 sigma with drop to 9.4927% (above/below ~9.5% drop level ~ 1.5%) 1.0% above / below @ ~2.326348 sigma with drop to 6.680% (above/below ~6.7% drop level ~ 1.0%) 0.5% above / below @ ~2.57583 sigma with drop to 3.624% (above/below ~3.6% drop level ~ 0.5%) 0.25% above / below @ ~2.80703 sigma with drop to 1.945% (above/below ~1.95% drop level ~ 0.25%) 0.1% above / below @ ~3.09023 sigma with drop to 0.844% (above/below ~0.8% drop level ~ 0.1%) 0.05% above / below @ ~3.29052 sigma with drop to 0.445% (above/below ~0.4% drop level ~ 0.05%)

Correctness of these drop values values were approximately verified on a 200 cube float volume featuring Gaussian Noise with sigma = 1000 after strongly smoothing (with window 50) the histogram (taken with bin size 1).

See …FMEstable/ReleaseMeVis/Modules/ML/MLCurveUtils/networks/CurveFilter_ManualDropLevelTest.mlab

Constant Value

name: constCurveParam, type: Double, default: 0

Value for first curve in list

Average Of Parameter

name: averageOfParameter, type: Double, default: 0

Average over curve parameters over all curves in list

StdDev Of Parameter

name: stdDevOfParameter, type: Double, default: 0

StdDev over curve parameters over all curves in list

Bin Size

name: histogramBinSize, type: Double, default: 1, minimum: 0.001

Resample curve so it collects values into bins of this size

Use Step Function

name: useStepFunction, type: Bool, default: TRUE

Draw histogram curve as a bar plot

Model Fitting Rel Center Of Drop Points

name: ModelFittingRelCenterOfDropPoints, type: Bool, default: FALSE

Select if true max or center of peak value (from drop points) is used for parabola or secant model fitting

Hidden Fields

correctInvalidInterval

name: correctInvalidInterval, type: Bool, default: TRUE