[Paraview] Optional input ports

Cornelis Bockemühl cornelis.bockemuehl at gmail.com
Tue Nov 15 16:19:06 EST 2016


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/654b6217/attachment.html>


More information about the ParaView mailing list