[Paraview] Optional input ports

Mathieu Westphal mathieu.westphal at kitware.com
Tue Nov 15 17:18:09 EST 2016


Hello

Sorry i missed the part when you said that a standard filter showed this
behavior.
Indeed, the behavior you are seeing is normal, considering the input
management greyed out. One could argue the that it should be authorized to
change input before applying but it is not supported.

However, this part
| Now the "Change Input" would be avaliable in the context menu, but
specifying any additional input NOW has no effect: the calculation is not
redone any more...

Looks like a bug in your filter. I know nothing about statistics, but a
tried specifying the optional model input this way with multicorelative,
and it seems to change trigger a recomputation of the filter with different
results.

Regards,

Mathieu Westphal

On Tue, Nov 15, 2016 at 10:19 PM, Cornelis Bockemühl <
cornelis.bockemuehl at gmail.com> wrote:

> Dear Mathieu,
>
> As I said I do not think it is a problem in my XML or C++ code, but a
> "simple user question"! Which is why I explained that it also happens with
> the "standard filter" from the standard package: Multicorrelative
> Statistics.
>
> For this reason I am now providing also simply the XML for that filter
> which is from the following file in the paraview sources:
>
> ParaViewCore/ServerManager/SMApplication/Resources/filter.xml
>
> """""""""""""""""""""""""""""
>     <SourceProxy class="vtkPSciVizMultiCorrelativeStats"
>                  label="Multicorrelative Statistics"
>                  name="MulticorrelativeStatistics">
>       <Documentation long_help="Compute a statistical model of a dataset
> and/or assess the dataset with a statistical model."
>                      short_help="Compute a statistical model of a dataset
> and/or assess the dataset with a statistical model.">
>       This filter either computes a statistical model of a dataset or takes
>       such a model as its second input. Then, the model (however it is
>       obtained) may optionally be used to assess the input
> dataset.<p>
>       This filter computes the covariance matrix for all the arrays you
> select
>       plus the mean of each array. The model is thus a multivariate
> Gaussian
>       distribution with the mean vector and variances provided. Data is
>       assessed using this model by computing the Mahalanobis distance for
> each
>       input point. This distance will always be positive.<p> The
> learned
>       model output format is rather dense and can be confusing, so it is
>       discussed here. The first filter output is a multiblock dataset
>       consisting of 2 tables: <ol> <li> Raw covariance data.
>       <li> Covariance matrix and its Cholesky decomposition.
> </ol>
>       The raw covariance table has 3 meaningful columns: 2 titled
> "Column1" and
>       "Column2" whose entries generally refer to the N arrays you selected
> when
>       preparing the filter and 1 column titled "Entries" that contains
> numeric
>       values. The first row will always contain the number of observations
> in
>       the statistical analysis. The next N rows contain the mean for each
> of
>       the N arrays you selected. The remaining rows contain covariances of
>       pairs of arrays.<p> The second table (covariance matrix and
>       Cholesky decomposition) contains information derived from the raw
>       covariance data of the first table. The first N rows of the first
> column
>       contain the name of one array you selected for analysis. These rows
> are
>       followed by a single entry labeled "Cholesky" for a total of N+1
> rows.
>       The second column, Mean contains the mean of each variable in the
> first N
>       entries and the number of observations processed in the final (N+1)
>       row.<p> The remaining columns (there are N, one for each array)
>       contain 2 matrices in triangular format. The upper right triangle
>       contains the covariance matrix (which is symmetric, so its lower
> triangle
>       may be inferred). The lower left triangle contains the Cholesky
>       decomposition of the covariance matrix (which is triangular, so its
> upper
>       triangle is zero). Because the diagonal must be stored for both
> matrices,
>       an additional row is required — hence the N+1
> rows and
>       the final entry of the column named "Column".</Documentation>
>       <InputProperty command="SetInputConnection"
>                      name="Input"
>                      port_index="0">
>         <ProxyGroupDomain name="groups">
>           <Group name="sources" />
>           <Group name="filters" />
>         </ProxyGroupDomain>
>         <DataTypeDomain name="input_type">
>           <DataType value="vtkImageData" />
>           <DataType value="vtkStructuredGrid" />
>           <DataType value="vtkPolyData" />
>           <DataType value="vtkUnstructuredGrid" />
>           <DataType value="vtkTable" />
>           <DataType value="vtkGraph" />
>         </DataTypeDomain>
>         <InputArrayDomain name="input_array" />
>         <Documentation>The input to the filter. Arrays from this dataset
> will
>         be used for computing statistics and/or assessed by a statistical
>         model.</Documentation>
>       </InputProperty>
>       <InputProperty command="SetInputConnection"
>                      name="ModelInput"
>                      null_on_empty="1"
>                      port_index="1">
>         <Hints>
>           <Optional />
>           <!-- No input selection dialog at instantiation -->
>         </Hints>
>         <ProxyGroupDomain name="groups">
>           <Group name="sources" />
>           <Group name="filters" />
>         </ProxyGroupDomain>
>         <DataTypeDomain name="input_type">
>           <DataType value="vtkTable" />
>           <DataType value="vtkMultiBlockDataSet" />
>         </DataTypeDomain>
>         <Documentation>A previously-calculated model with which to assess a
>         separate dataset. This input is optional.</Documentation>
>       </InputProperty>
>       <IntVectorProperty command="SetAttributeMode"
>                          default_values="0"
>                          name="AttributeMode"
>                          number_of_elements="1">
>         <FieldDataDomain enable_field_data="1"
>                          name="enum">
>           <RequiredProperties>
>             <Property function="Input"
>                       name="Input" />
>           </RequiredProperties>
>         </FieldDataDomain>
>         <Documentation>Specify which type of field data the arrays will be
>         drawn from.</Documentation>
>       </IntVectorProperty>
>       <StringVectorProperty clean_command="ClearAttributeArrays"
>                             command="EnableAttributeArray"
>                             label="Variables of Interest"
>                             name="SelectArrays"
>                             number_of_elements_per_command="1"
>                             repeat_command="1">
>         <ArrayListDomain name="array_list">
>           <RequiredProperties>
>             <Property function="Input"
>                       name="Input" />
>             <Property function="FieldDataSelection"
>                       name="AttributeMode" />
>           </RequiredProperties>
>         </ArrayListDomain>
>         <Documentation>Choose arrays whose entries will be used to form
>         observations for statistical analysis.</Documentation>
>       </StringVectorProperty>
>       <IntVectorProperty animateable="0"
>                          command="SetTask"
>                          default_values="3"
>                          name="Task"
>                          number_of_elements="1">
>         <EnumerationDomain name="task_list">
>           <Entry text="Detailed model of input data"
>                  value="0" />
>           <Entry text="Model a subset of the data"
>                  value="1" />
>           <Entry text="Assess the data with a model"
>                  value="2" />
>           <Entry text="Model and assess the same data"
>                  value="3" />
>         </EnumerationDomain>
>         <Documentation>Specify the task to be performed: modeling and/or
>         assessment. <ol> <li> "Detailed model of input data,"
>         creates a set of output tables containing a calculated statistical
>         model of the <b>entire</b> input dataset;</li>
>         <li> "Model a subset of the data," creates an output table
> (or
>         tables) summarizing a <b>randomly-chosen subset</b> of
> the
>         input dataset;</li> <li> "Assess the data with a
> model,"
>         adds attributes to the first input dataset using a model provided
> on
>         the second input port; and</li> <li> "Model and assess
> the
>         same data," is really just operations 2 and 3 above applied to the
> same
>         input dataset. The model is first trained using a fraction of the
> input
>         data and then the entire dataset is assessed using that
>         model.</li> </ol> When the task includes creating a
> model
>         (i.e., tasks 2, and 4), you may adjust the fraction of the input
>         dataset used for training. You should avoid using a large fraction
> of
>         the input data for training as you will then not be able to detect
>         overfitting. The <i>Training fraction</i> setting will
> be
>         ignored for tasks 1 and 3.</Documentation>
>       </IntVectorProperty>
>       <DoubleVectorProperty animateable="1"
>                             command="SetTrainingFraction"
>                             default_values="0.1"
>                             name="TrainingFraction"
>                             number_of_elements="1">
>         <DoubleRangeDomain max="1"
>                            min="0"
>                            name="training_range" />
>         <Documentation>Specify the fraction of values from the input
> dataset to
>         be used for model fitting. The exact set of values is chosen at
> random
>         from the dataset.</Documentation>
>       </DoubleVectorProperty>
>       <OutputPort index="0"
>                   name="Statistical Model" />
>       <OutputPort index="1"
>                   name="Assessed Data" />
>       <Hints>
>         <Visibility replace_input="1" />
>         <!-- View can be used to specify the preferred view for the proxy
> -->
>         <View type="SpreadSheetView" />
>       </Hints>
>     </SourceProxy>
>     <!-- MulticorrelativeStatistics -->
>     <!-- ====================================================================
> -->
> """""""""""""""""""""""""""""
>
> You find the explanation about the "optional" model input, and also the
> second "InputProperty" tag, with the name "ModelInput", and the "Hint"
> "optional".
>
> My problem is that if I am running ParaView just normally and try to
> provide a first and second input to that filter, I do not find a way to
> provide the second one that is "optional"!
>
> With my own filter I found now some stupid workaround: just drop the
> "optional" in the "Hints": then it is not any more optional, but a window
> pops up that asks for the inputs. In this case I can of course specify the
> second input - or leave it: It is then a question of the RequestData
> function in the C++ to handle this case properly: a second input with a
> null pointer.
>
> But this is
>
> a) probably not how it SHOULD work, and
> b) not an option for the standard filters (such as Multicorrelative
> Statistics) - if I do not want to change all the paraview sources (xml) and
> recompile...
>
> Sorry to bother this list at all because I am afraid that the solution is
> in some very simple and "almost obvious" little thing that I have
> overlooked in the paraview GUI... ;-)
>
> Regards,
> Cornelis
>
>
> 2016-11-15 21:12 GMT+01:00 Mathieu Westphal <mathieu.westphal at kitware.com>
> :
>
>> Hello
>>
>> Can you provide your xml file ?
>>
>> Regards,
>>
>> Mathieu Westphal
>>
>> On Tue, Nov 15, 2016 at 9:07 PM, Cornelis Bockemühl <
>> cornelis.bockemuehl at gmail.com> wrote:
>>
>>> Looks like I may have to provide an example that everybody can follow!?
>>>
>>> The "Multicorrelative Statistics" filter is already such an example!
>>>
>>> Reading the docs and looking into the server XML it is obvious that you
>>> can optionally provide a model as a second input port. However, I cannot
>>> find any way how to specify this second input:
>>>
>>> - Directly selecting it (next to the primary input) has the effect that
>>> the filter is greyed out in Paraview - no chance!
>>>
>>> - Selecting only the primary data input allows to choose the
>>> "Multicorrelative Statistics" filter just fine. I would expect that before
>>> pressing "Apply" I should still specify the second input (the model thus),
>>> but no chance: In the context menu, the "Change Input" option is greyed out
>>> - and I cannot find any other way to enter any second input data.
>>>
>>> - Pressing "Apply" does apply the filter, but without the optional model
>>> data. Now the "Change Input" would be avaliable in the context menu, but
>>> specifying any additional input NOW has no effect: the calculation is not
>>> redone any more...
>>>
>>> Bottom line: My first example was from a self-written filter, so there
>>> is still the possibility that I have done something wrong. But with the
>>> standard filter that comes with every Paraview installation I would expect
>>> that there MUST be some way to provide that second input data item!?
>>>
>>> I am simply lost here!
>>>
>>> Regards,
>>> Cornelis
>>>
>>> >Dear Parview users,
>>> >
>>> >This question seems trivial - but I do not find any solution on my own!
>>> >
>>> >I have a filter with one mandatory and two optional input ports, and this
>>> >is how I proceed with it:
>>> >
>>> >- Select some data object, then call that filter. It does not open the
>>> >input port item selection dialog because the one mandatory input is already
>>> >satisfied.
>>> >
>>> >- I want to add one of the optional inputs (or both) - but the "change
>>> >input" option is greyed! Strange - because for me this would be the logical
>>> >moment to specify additional input, i.e.: BEFORE pressing the Apply
>>> >button...
>>> >
>>> >- Ok, I press the Apply button thus. Of course the output is not what I
>>> >want because the optional inputs were missing...
>>> >
>>> >- However, now I can choose also the "change input" option - and I do so. I
>>> >select the two optional inputs. But now nothing happens any more - and now
>>> >the Apply button is grey, so no way to trigger an update of the output!
>>> >
>>> >To me this does not look very logical, so I assume that I am missing some
>>> >point...
>>> >
>>> >The other "intuitive option" would be to select all the desired input
>>> >items, and only then open the filter. However this is impossible from the
>>> >beginning because now the filter is already greyed in the menu as being
>>> >"not applicable"!
>>> >
>>> >Thanks for any helpful hints!
>>> >
>>> >Regards,
>>> >Cornelis Bockemühl
>>>
>>>
>>> --
>>> Cornelis Bockemühl
>>> Basel, Schweiz
>>>
>>> _______________________________________________
>>> Powered by www.kitware.com
>>>
>>> Visit other Kitware open-source projects at
>>> http://www.kitware.com/opensource/opensource.html
>>>
>>> Please keep messages on-topic and check the ParaView Wiki at:
>>> http://paraview.org/Wiki/ParaView
>>>
>>> Search the list archives at: http://markmail.org/search/?q=ParaView
>>>
>>> Follow this link to subscribe/unsubscribe:
>>> http://public.kitware.com/mailman/listinfo/paraview
>>>
>>>
>>
>
>
> --
> Cornelis Bockemühl
> Basel, Schweiz
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/paraview/attachments/20161115/877f81e6/attachment.html>


More information about the ParaView mailing list