vtkMultiThreshold Class Reference

#include <vtkMultiThreshold.h>

Inheritance diagram for vtkMultiThreshold:

Inheritance graph
[legend]
Collaboration diagram for vtkMultiThreshold:

Collaboration graph
[legend]

List of all members.


Detailed Description

Threshold cells within multiple intervals.

This filter can be substituted for a chain of several vtkThreshold filters and can also perform more sophisticated subsetting operations. It generates a vtkMultiBlockDataSet as its output. This multiblock dataset contains a vtkUnstructuredGrid for each thresholded subset you request. A thresholded subset can be a set defined by an interval over a point or cell attribute of the mesh; these subsets are called IntervalSets. A thresholded subset can also be a boolean combination of one or more IntervalSets; these subsets are called BooleanSets. BooleanSets allow complex logic since their output can depend on multiple intervals over multiple variables defined on the input mesh. This is useful because it eliminates the need for thresholding several times and then appending the results, as can be required with vtkThreshold when one wants to remove some range of values (e.g., a notch filter). Cells are not repeated when they belong to more than one interval unless those intervals have different output grids.

Another advantage this filter provides over vtkThreshold is the ability to threshold on non-scalar (i.e., vector, tensor, etc.) attributes without first computing an array containing some norm of the desired attribute. vtkMultiThreshold provides $L_1$, $L_2$, and $L_{\infty}$ norms.

This filter makes a distinction between intermediate subsets and subsets that will be output to a grid. Each intermediate subset you create with AddIntervalSet or AddBooleanSet is given a unique integer identifier (via the return values of these member functions). If you wish for a given set to be output, you must call OutputSet and pass it one of these identifiers. The return of OutputSet is the integer index of the output set in the multiblock dataset created by this filter.

For example, if an input mesh defined three attributes T, P, and s, one might wish to find cells that satisfy "T < 320 [K] && ( P > 101 [kPa] || s < 0.1 [kJ/kg/K] )". To accomplish this with a vtkMultiThreshold filter,

 vtkMultiThreshold* thr;
 int intervalSets[3];

 intervalSets[0] = thr->AddIntervalSet( vtkMath::NegInf(), 320., vtkMultiThreshold::CLOSED, vtkMultiThreshold::OPEN,
     vtkDataObject::FIELD_ASSOCIATION_POINTS, "T", 0, 1 );
 intervalSets[1] = thr->AddIntervalSet( 101., vtkMath::Inf(), vtkMultiThreshold::OPEN, vtkMultiThreshold::CLOSED,
     vtkDataObject::FIELD_ASSOCIATION_CELLS, "P", 0, 1 );
 intervalSets[2] = thr->AddIntervalSet( vtkMath::NegInf(), 0.1, vtkMultiThreshold::CLOSED, vtkMultiThreshold::OPEN,
     vtkDataObject::FIELD_ASSOCIATION_POINTS, "s", 0, 1 );

 int intermediate = thr->AddBooleanSet( vtkMultiThreshold::OR, 2, &intervalSets[1] );

 int intersection[2];
 intersection[0] = intervalSets[0];
 intersection[1] = intermediate;
 int outputSet = thr->AddBooleanSet( vtkMultiThreshold::AND, 2, intersection );

 int outputGridIndex = thr->OutputSet( outputSet );
 thr->Update();
 
The result of this filter will be a multiblock dataset that contains a single child with the desired cells. If we had also called thr->OutputSet( intervalSets[0] );, there would be two child meshes and one would contain all cells with T < 320 [K]. In that case, the output can be represented by this graph
inline_dotgraph_1.dot
The filled rectangles represent sets that are output.

Definition at line 118 of file vtkMultiThreshold.h.


Public Types

enum  Closure { OPEN = 0, CLOSED = 1 }
 Whether the endpoint value of an interval should be included or excluded. More...
enum  Norm { LINFINITY_NORM = -3, L2_NORM = -2, L1_NORM = -1 }
 Norms that can be used to threshold vector attributes. More...
enum  SetOperation {
  AND, OR, XOR, WOR,
  NAND
}
 Operations that can be performed on sets to generate another set. Most of these operators take 2 or more input sets. More...
typedef
vtkMultiBlockDataSetAlgorithm 
Superclass
typedef double(* TupleNorm )(vtkDataArray *arr, vtkIdType tuple, int component)
 A pointer to a function that returns a norm (or a single component) of a tuple with 1 or more components.

Public Member Functions

virtual const char * GetClassName ()
virtual int IsA (const char *type)
virtual void PrintSelf (ostream &os, vtkIndent indent)
int AddBooleanSet (int operation, int numInputs, int *inputs)
int OutputSet (int setId)
void Reset ()
int AddIntervalSet (double xmin, double xmax, int omin, int omax, int assoc, const char *arrayName, int component, int allScalars)
int AddIntervalSet (double xmin, double xmax, int omin, int omax, int assoc, int attribType, int component, int allScalars)
int AddLowpassIntervalSet (double xmax, int assoc, const char *arrayName, int component, int allScalars)
int AddHighpassIntervalSet (double xmin, int assoc, const char *arrayName, int component, int allScalars)
int AddBandpassIntervalSet (double xmin, double xmax, int assoc, const char *arrayName, int component, int allScalars)
int AddNotchIntervalSet (double xlo, double xhi, int assoc, const char *arrayName, int component, int allScalars)

Static Public Member Functions

static int IsTypeOf (const char *type)
static vtkMultiThresholdSafeDownCast (vtkObject *o)
static vtkMultiThresholdNew ()

Protected Types

typedef vtkstd::vector
< Interval * > 
IntervalList
 A list of pointers to IntervalSets.
typedef vtkstd::map< NormKey,
IntervalList
RuleMap
 A map describing the IntervalSets that share a common attribute and norm.
typedef vtkstd::vector< int > TruthTreeValues
typedef vtkstd::vector
< TruthTreeValues
TruthTree
enum  Ruling { INCONCLUSIVE = -1, INCLUDE = -2, EXCLUDE = -3 }

Protected Member Functions

 vtkMultiThreshold ()
virtual ~vtkMultiThreshold ()
virtual int RequestData (vtkInformation *, vtkInformationVector **, vtkInformationVector *)
virtual int FillInputPortInformation (int port, vtkInformation *info)
int AddIntervalSet (NormKey &nk, double xmin, double xmax, int omin, int omax)
void PrintGraph (ostream &os)
 vtkMultiThreshold (const vtkMultiThreshold &)
void operator= (const vtkMultiThreshold &)
void UpdateDependents (int id, vtkstd::set< int > &unresolvedOutputs, TruthTreeValues &setStates, vtkCellData *inCellData, vtkIdType cellId, vtkGenericCell *cell, vtkstd::vector< vtkUnstructuredGrid * > &outv)

Protected Attributes

int NextArrayIndex
int NumberOfOutputs
RuleMap IntervalRules
vtkstd::vector< Set * > Sets
TruthTree DependentSets

Classes

class  BooleanSet
 A subset of a mesh represented as a boolean set operation. More...
class  Interval
 A subset of a mesh represented by a range of acceptable attribute values. More...
class  NormKey
 A class with comparison operator used to index input array norms used in threshold rules. More...
class  Set
 A base class for representing threshold sets. More...

Member Typedef Documentation

Reimplemented from vtkMultiBlockDataSetAlgorithm.

Definition at line 121 of file vtkMultiThreshold.h.

typedef double(* vtkMultiThreshold::TupleNorm)(vtkDataArray *arr, vtkIdType tuple, int component)

A pointer to a function that returns a norm (or a single component) of a tuple with 1 or more components.

typedef vtkstd::vector<Interval*> vtkMultiThreshold::IntervalList [protected]

A list of pointers to IntervalSets.

Definition at line 387 of file vtkMultiThreshold.h.

typedef vtkstd::map<NormKey,IntervalList> vtkMultiThreshold::RuleMap [protected]

A map describing the IntervalSets that share a common attribute and norm.

Definition at line 389 of file vtkMultiThreshold.h.

typedef vtkstd::vector<int> vtkMultiThreshold::TruthTreeValues [protected]

Definition at line 391 of file vtkMultiThreshold.h.

typedef vtkstd::vector<TruthTreeValues> vtkMultiThreshold::TruthTree [protected]

Definition at line 392 of file vtkMultiThreshold.h.


Member Enumeration Documentation

Whether the endpoint value of an interval should be included or excluded.

Enumerator:
OPEN  Specify an open interval.
CLOSED  Specify a closed interval.

Definition at line 127 of file vtkMultiThreshold.h.

Norms that can be used to threshold vector attributes.

Enumerator:
LINFINITY_NORM  Use the $L_{\infty}$ norm for the specified array threshold.
L2_NORM  Use the $L_2$ norm for the specified array threshold.
L1_NORM  Use the $L_1$ norm for the specified array threshold.

Definition at line 132 of file vtkMultiThreshold.h.

Operations that can be performed on sets to generate another set. Most of these operators take 2 or more input sets.

Enumerator:
AND  Only include an element if it belongs to all the input sets.
OR  Include an element if it belongs to any input set.
XOR  Include an element if it belongs to exactly one input set.
WOR  Include elements that belong to an odd number of input sets (a kind of "winding XOR").
NAND  Only include elements that don't belong to any input set.

Definition at line 138 of file vtkMultiThreshold.h.

enum vtkMultiThreshold::Ruling [protected]

When an interval is evaluated, its value is used to update a truth table. If its value allows the output of the truth table to be determined, then either INCLUDE or EXCLUDE is returned. Otherwise, INCONCLUSIVE is returned and more intervals must be evaluated. As an example, consider the ruleset {A>10} & ( {6<B<8} | {C==12} ). We first evaluate A. Say A is 100. This makes the first rule true, but the value of the rule *set* is still indeterminate. INCONCLUSIVE is returned. Next we consider B. If B is 7, then INCLUDE will be returned and there is no need to examine C. If B is 0, then INCONCLUSIVE is returned again and we must examine C. If C is 12, then INCLUDE is returned, otherwise EXCLUDE is returned.

Enumerator:
INCONCLUSIVE 
INCLUDE 
EXCLUDE 

Definition at line 360 of file vtkMultiThreshold.h.


Constructor & Destructor Documentation

vtkMultiThreshold::vtkMultiThreshold (  )  [protected]

virtual vtkMultiThreshold::~vtkMultiThreshold (  )  [protected, virtual]

vtkMultiThreshold::vtkMultiThreshold ( const vtkMultiThreshold  )  [protected]


Member Function Documentation

virtual const char* vtkMultiThreshold::GetClassName (  )  [virtual]

Reimplemented from vtkMultiBlockDataSetAlgorithm.

static int vtkMultiThreshold::IsTypeOf ( const char *  name  )  [static]

Return 1 if this class type is the same type of (or a subclass of) the named class. Returns 0 otherwise. This method works in combination with vtkTypeMacro found in vtkSetGet.h.

Reimplemented from vtkMultiBlockDataSetAlgorithm.

virtual int vtkMultiThreshold::IsA ( const char *  name  )  [virtual]

Return 1 if this class is the same type of (or a subclass of) the named class. Returns 0 otherwise. This method works in combination with vtkTypeMacro found in vtkSetGet.h.

Reimplemented from vtkMultiBlockDataSetAlgorithm.

static vtkMultiThreshold* vtkMultiThreshold::SafeDownCast ( vtkObject o  )  [static]

Reimplemented from vtkMultiBlockDataSetAlgorithm.

static vtkMultiThreshold* vtkMultiThreshold::New (  )  [static]

Create an object with Debug turned off, modified time initialized to zero, and reference counting on.

Reimplemented from vtkMultiBlockDataSetAlgorithm.

virtual void vtkMultiThreshold::PrintSelf ( ostream &  os,
vtkIndent  indent 
) [virtual]

Methods invoked by print to print information about the object including superclasses. Typically not called by the user (use Print() instead) but used in the hierarchical print process to combine the output of several classes.

Reimplemented from vtkMultiBlockDataSetAlgorithm.

int vtkMultiThreshold::AddIntervalSet ( double  xmin,
double  xmax,
int  omin,
int  omax,
int  assoc,
const char *  arrayName,
int  component,
int  allScalars 
)

Add a mesh subset to be computed by thresholding an attribute of the input mesh. The subset can then be added to an output mesh with OuputSet() or combined with other sets using AddBooleanSet. If you wish to include all cells with values below some number a, call with xmin set to vtkMath::NegInf() and xmax set to a. Similarly, if you wish to include all cells with values above some number a, call with xmin set to a and xmax set to vtkMath::Inf(). When specifying Inf() or NegInf() for an endpoint, it does not matter whether you specify and open or closed endpoint. When creating intervals, any integers can be used for the IDs of output meshes. All that matters is that the same ID be used if intervals should output to the same mesh. The outputs are ordered with ascending IDs in output block 0. It is possible to specify an invalid interval, in which case these routines will return -1. Invalid intervals occur when - an array does not exist, - center is invalid, - xmin == xmax and omin and/or omax are vtkMultiThreshold::OPEN, or - xmin > xmax. - xmin or xmax is not a number (i.e., IEEE NaN). Having both xmin and xmax equal NaN is allowed. vtkMath provides a portable way to specify IEEE infinities and Nan. Note that specifying an interval completely out of the bounds of an attribute is considered valid. In fact, it is occasionally useful to create a closed interval with both endpoints set to $\infty$ or both endpoints set to $-\infty$ in order to locate cells with problematic values.

Parameters:
xmin The minimum attribute value
xmax The maximum attribute value
omin Whether the interval should be open or closed at xmin. Use vtkMultiThreshold::OPEN or vtkMultiThreshold::CLOSED.
omax Whether the interval should be open or closed at xmax. Use vtkMultiThreshold::OPEN or vtkMultiThreshold::CLOSED.
assoc One of vtkDataObject::FIELD_ASSOCIATION_CELLS or vtkDataObject::FIELD_ASSOCIATION_POINTS indicating whether a point or cell array should be used.
arrayName The name of the array to use for thresholding
attribType The attribute to use for thresholding. One of vtkDataSetAttributes::SCALARS, VECTORS, TENSORS, NORMALS, TCOORDS, or GLOBALIDS.
component The number of the component to threshold on or one of the following enumerants for norms: LINFINITY_NORM, L2_NORM, L1_NORM.
allScalars When center is vtkDataObject::FIELD_ASSOCIATION_POINTS, must all scalars be in the interval for the cell to be passed to the output, or just a single point's scalar?
Returns:
An index used to identify the cells selected by the interval or -1 if the interval specification was invalid. If a valid value is returned, you may pass it to OutputSet().

int vtkMultiThreshold::AddIntervalSet ( double  xmin,
double  xmax,
int  omin,
int  omax,
int  assoc,
int  attribType,
int  component,
int  allScalars 
)

Add a mesh subset to be computed by thresholding an attribute of the input mesh. The subset can then be added to an output mesh with OuputSet() or combined with other sets using AddBooleanSet. If you wish to include all cells with values below some number a, call with xmin set to vtkMath::NegInf() and xmax set to a. Similarly, if you wish to include all cells with values above some number a, call with xmin set to a and xmax set to vtkMath::Inf(). When specifying Inf() or NegInf() for an endpoint, it does not matter whether you specify and open or closed endpoint. When creating intervals, any integers can be used for the IDs of output meshes. All that matters is that the same ID be used if intervals should output to the same mesh. The outputs are ordered with ascending IDs in output block 0. It is possible to specify an invalid interval, in which case these routines will return -1. Invalid intervals occur when - an array does not exist, - center is invalid, - xmin == xmax and omin and/or omax are vtkMultiThreshold::OPEN, or - xmin > xmax. - xmin or xmax is not a number (i.e., IEEE NaN). Having both xmin and xmax equal NaN is allowed. vtkMath provides a portable way to specify IEEE infinities and Nan. Note that specifying an interval completely out of the bounds of an attribute is considered valid. In fact, it is occasionally useful to create a closed interval with both endpoints set to $\infty$ or both endpoints set to $-\infty$ in order to locate cells with problematic values.

Parameters:
xmin The minimum attribute value
xmax The maximum attribute value
omin Whether the interval should be open or closed at xmin. Use vtkMultiThreshold::OPEN or vtkMultiThreshold::CLOSED.
omax Whether the interval should be open or closed at xmax. Use vtkMultiThreshold::OPEN or vtkMultiThreshold::CLOSED.
assoc One of vtkDataObject::FIELD_ASSOCIATION_CELLS or vtkDataObject::FIELD_ASSOCIATION_POINTS indicating whether a point or cell array should be used.
arrayName The name of the array to use for thresholding
attribType The attribute to use for thresholding. One of vtkDataSetAttributes::SCALARS, VECTORS, TENSORS, NORMALS, TCOORDS, or GLOBALIDS.
component The number of the component to threshold on or one of the following enumerants for norms: LINFINITY_NORM, L2_NORM, L1_NORM.
allScalars When center is vtkDataObject::FIELD_ASSOCIATION_POINTS, must all scalars be in the interval for the cell to be passed to the output, or just a single point's scalar?
Returns:
An index used to identify the cells selected by the interval or -1 if the interval specification was invalid. If a valid value is returned, you may pass it to OutputSet().

int vtkMultiThreshold::AddLowpassIntervalSet ( double  xmax,
int  assoc,
const char *  arrayName,
int  component,
int  allScalars 
) [inline]

These convenience members make it easy to insert closed intervals. The "notch" interval is accomplished by creating a bandpass interval and applying a NAND operation. In this case, the set ID returned in the NAND operation set ID. Note that you can pass xmin == xmax when creating a bandpass threshold to retrieve elements matching exactly one value (since the intervals created by these routines are closed).

Definition at line 430 of file vtkMultiThreshold.h.

int vtkMultiThreshold::AddHighpassIntervalSet ( double  xmin,
int  assoc,
const char *  arrayName,
int  component,
int  allScalars 
) [inline]

These convenience members make it easy to insert closed intervals. The "notch" interval is accomplished by creating a bandpass interval and applying a NAND operation. In this case, the set ID returned in the NAND operation set ID. Note that you can pass xmin == xmax when creating a bandpass threshold to retrieve elements matching exactly one value (since the intervals created by these routines are closed).

Definition at line 435 of file vtkMultiThreshold.h.

int vtkMultiThreshold::AddBandpassIntervalSet ( double  xmin,
double  xmax,
int  assoc,
const char *  arrayName,
int  component,
int  allScalars 
) [inline]

These convenience members make it easy to insert closed intervals. The "notch" interval is accomplished by creating a bandpass interval and applying a NAND operation. In this case, the set ID returned in the NAND operation set ID. Note that you can pass xmin == xmax when creating a bandpass threshold to retrieve elements matching exactly one value (since the intervals created by these routines are closed).

Definition at line 440 of file vtkMultiThreshold.h.

int vtkMultiThreshold::AddNotchIntervalSet ( double  xlo,
double  xhi,
int  assoc,
const char *  arrayName,
int  component,
int  allScalars 
) [inline]

These convenience members make it easy to insert closed intervals. The "notch" interval is accomplished by creating a bandpass interval and applying a NAND operation. In this case, the set ID returned in the NAND operation set ID. Note that you can pass xmin == xmax when creating a bandpass threshold to retrieve elements matching exactly one value (since the intervals created by these routines are closed).

Definition at line 446 of file vtkMultiThreshold.h.

int vtkMultiThreshold::AddBooleanSet ( int  operation,
int  numInputs,
int *  inputs 
)

Create a new mesh subset using boolean operations on pre-existing sets.

int vtkMultiThreshold::OutputSet ( int  setId  ) 

Create an output mesh containing a boolean or interval subset of the input mesh.

void vtkMultiThreshold::Reset (  ) 

Remove all the intervals currently defined.

virtual int vtkMultiThreshold::RequestData ( vtkInformation ,
vtkInformationVector **  ,
vtkInformationVector  
) [protected, virtual]

This function performs the actual thresholding.

Reimplemented from vtkMultiBlockDataSetAlgorithm.

virtual int vtkMultiThreshold::FillInputPortInformation ( int  port,
vtkInformation info 
) [protected, virtual]

We accept any mesh that is descended from vtkPointSet. In the future, it is possible to accept more types but this would require us to generate a new vtkPoints object for each output mesh.

Reimplemented from vtkMultiBlockDataSetAlgorithm.

void vtkMultiThreshold::UpdateDependents ( int  id,
vtkstd::set< int > &  unresolvedOutputs,
TruthTreeValues setStates,
vtkCellData inCellData,
vtkIdType  cellId,
vtkGenericCell cell,
vtkstd::vector< vtkUnstructuredGrid * > &  outv 
) [protected]

Recursively update the setStates and unresolvedOutputs vectors based on this->DependentSets.

int vtkMultiThreshold::AddIntervalSet ( NormKey nk,
double  xmin,
double  xmax,
int  omin,
int  omax 
) [protected]

A utility method called by the public AddInterval members.

void vtkMultiThreshold::PrintGraph ( ostream &  os  )  [protected]

Print out a graphviz-formatted text description of all the sets.

void vtkMultiThreshold::operator= ( const vtkMultiThreshold  )  [protected]


Member Data Documentation

A variable used to store the next index to use when calling SetInputArrayToProcess. Its value is stored in an interval's ArrayIndex member and used during RequestData to retrieve a pointer to the actual array.

Definition at line 380 of file vtkMultiThreshold.h.

The number of output datasets.

Definition at line 383 of file vtkMultiThreshold.h.

A set of threshold rules sorted by the attribute+norm to which they are applied.

Definition at line 396 of file vtkMultiThreshold.h.

vtkstd::vector<Set*> vtkMultiThreshold::Sets [protected]

A list of rules keyed by their unique integer ID. This list is used to quickly determine whether interval membership implies membership in a given output mesh.

Definition at line 401 of file vtkMultiThreshold.h.

A list of boolean sets whose values depend on the given set. Each time an interval is evaluated for a cell, the list of dependent boolean sets contained here is updated. Any boolean operations whose truth values are decided are then marked and their dependent sets are examined.

Definition at line 408 of file vtkMultiThreshold.h.


The documentation for this class was generated from the following file:

Generated on Mon Sep 27 18:35:33 2010 for VTK by  doxygen 1.5.6