What

ModifierTypes.xml

Required

no

Description

Definition of modifiers in an IFD environment

schema location

https://fewsdocs.deltares.nl/schemas/version1.0/modifierTypes.xsd

Contents

Introduction

The chapter describes the configuration options of the modifiers.xml. The modifiers.xml is used to define which modifier types are available within a Delft-FEWS configuration. The modifiers can be created in the modifiers panel. TimeValue-modifiers can also be created in the plot display by graphically modifying a time series or by changing values in the table. 

Modifier Concept

Modifiers play an important role in the concept of interactive forecasting. By using modifiers a forecaster can manually change time series, module parameters or location attributes. After creating one or more modifiers the forecaster can run a workflow locally in IFD mode to verify the effect of the modifiers. When a modifier is created it is initially only visible for the user who created the modifier. In this case the modifier is always colored red. 

On an OC the modifier is made final when a workflow in which the modifier is used is scheduled to run on the server. On a SA the modifier is made final when a regular workflow is started in which the modifier is used. When a modifier is made final the modifier will be colored green. A modifier that is outside of the forecast period is colored grey. The forecast period is defined by the start of the selected state in the IFD and the selected forecast length.

Within Delft-FEWS there are different modifier types:

  • Location attribute modifiers,
  • Module parameter modifiers,
  • Time series modifiers

The different types will be explained in more detail in the sections below. The modifierTypes.xml is the configuration file that can be used to define which modifier types are available in a FEWS system. It is for example possible to define that all time series which have parameter id X can be modified by using modifier A. If a topology node is selected in the forecast tree the module config quick scanner will determine which time series, locations and module parameter files are used in the workflow of the topology node. The time series which are used in the workflow and which have a parameter X can be modified in the modifiers panel by using modifier A.

Below an overview of all the modifiers in FEWS.


Modifier

TypeDescription
missing value modifiertime series modifierSet the values of a time series to missing over a certain period of time
time series modifiertime series modifierThis modifier can be used to modify the values of a time series by defining new time value pairs. It is also possible to define an operation like add 2 or divided by
3 for a certain period. It is also possible to set all the values to missing for a certain period (comparable to the missing value modifier)
constant value modifiertime series modifierSet the values of a time series to a fixed value over a certain period of time
enumeration modifiertime series modifier

The user can select an option from a pre-defined list of options. For each option a value will be defined which will stored in the time series.

This modifier is usually applied to an empty time series.

single value modifiertime series modifierThis modifier can be used to apply a certain value at a certain time to a time series.
typical profile modifiertime series modifierThis modifier can be used to shift an existing timeseries in time.
mark unreliable modifiertime series modifierThis modifier can used to set the values of a modifier to unreliable over a certain period of time.
blending steps modifiertransformation/module parameter moduleThis modifier can be used to adjust the amount of "blending steps" which will be used in the adjustQ transformation.
disable adjustment modifiertransformation/module parameter module

With this modifier it is possible to disable the adjustQ transformation

time shift constant modifiertransformation/module parameter moduleWith this modifier it is possible to modify the amount of time steps which will be used in the timeShiftConstant transformation
reverse order modifiertransformation/module parameter moduleWith this modifier it is possible to reverse the order of the time series in the mergeSimple transformation
compound modifiertime series modifierThis modifier can be used to define a value at a single date/time for 1 or more time series by using sliders.
high low surge selection modifiertime series modifier
switch option modifiertime series modifierModifier which can used to set a value for each time step for a set of time series. It is only possible to define a value for a one of the time series in the entire set.
option modifiertime series modifierThis modifier can be used to set a single value at a single time for a set of time series. It is only possible to define a value for a one of the time series in the entire set.
module parameter modifiermodule parameter modifierGeneric module parameter modifier panel which can used for all modifiers.
priority modifiertime series modifier
multiple model module parameter modifiermodule parameter modifierThe module parameter modifier can be used to modify multiple model parameters in a single modifier.
unit hydrograph modifiermodule parameter modifierThe unit hydrograph modifier can be used to modify the area elevation curve of the unit hydrograph model.
merge weighted modifiertransformation/module parameter modifierThis modifier can be used to modify the parameters of the mergeWeighted function.
table rating curve modifiertime series modifier
shift multiply rating curve modifiertime series modifierThe rating curve can be modified by shifting the entire curve or by multiplying the entire curve with a defined factor.
location attribute modifierlocation attribute modifierA modifier for modifying location attributes.
spatial profile modifiertime series modifier
spatial copy modifiertime series modifier


Location attribute modifiers

Location attribute modifiers are used to change the value of a location attribute. When a modifier is applied to a location attribute the original value of the attribute will not change. When the value of location attribute is retrieved from the data store, the original value will be retrieved first. After that FEWS will apply the available modifiers to the location attribute. The available and active modifiers will applied from old to new. This means that only the newest active location attribute modifier which changes a certain attribute will be effective.

Module parameter modifiers

Module parameter modifiers are used to modify module parameter files. It is possible to create multiple module parameter modifiers for a single module parameter file. Module parameter modifiers can be applied in two ways:

  • by overwriting the original values in the module parameter files,
  • by adding an additional group to the module parameter file which contains the modified parameters.

The advantage of the first option is that the model adapter doesn't have to be changed to use module parameters. The model receives a single set of module parameters in which the modifiers are already applied. In the second case the model parameter files contains the original values plus

one or more groups with the modified values. The model adapter has to create the modified set of module parameter values from this file. The original set of module parameter values are always in the first group. This group always has the attribute modified set to false. The additional groups contain the modified values and always have the attribute modified set to true. Below an example of a modified module parameter file.

<?xml version="1.0" encoding="UTF-8"?>
<parameters xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.wldelft.nl/fews/PI" xsi:schemaLocation="http://www.wldelft.nl/fews/PI https://fewsdocs.deltares.nl/schemas/version1.0/pi-schemas/pi_modelparameters.xsd" version="1.5">
    <group id="default" readonly="false" modified="false">
        <parameter id="UHG_DURATION" name="UHG_DURATION">
            <intValue>6</intValue>
        </parameter>
        <parameter id="UNIT" name="UNIT">
            <stringValue>ENGLISH</stringValue>
        </parameter>
        <parameter id="UHG_INTERVAL" name="UHG_INTERVAL">
            <intValue>6</intValue>
        </parameter>
        <parameter id="DRAINAGE_AREA" name="DRAINAGE_AREA">
            <dblValue>3103.0</dblValue>
        </parameter>
        <parameter id="CONSTANT_BASE_FLOW" name="CONSTANT_BASE_FLOW">
            <dblValue>111.0</dblValue>
        </parameter>
        <parameter id="UHG_ORDINATES" name="UHG_ORDINATES">
            <table>
                <columnTypes A="double"/>
                <row A="7499.0"/>
                <row A="16872.0"/>
                <row A="29370.0"/>
                <row A="39993.0"/>
                <row A="48116.0"/>
                <row A="43742.0"/>
                <row A="38118.0"/>
                <row A="31869.0"/>
                <row A="24995.0"/>
                <row A="18747.0"/>
                <row A="13123.0"/>
                <row A="8123.0"/>
                <row A="5436.0"/>
                <row A="3874.0"/>
                <row A="2625.0"/>
                <row A="1687.0"/>
                <row A="1000.0"/>
                <row A="500.0"/>
                <row A="250.0"/>
                <row A="62.0"/>
                <row A="0.0"/>
                <row A="0.0"/>
                <row A="0.0"/>
                <row A="0.0"/>
                <row A="0.0"/>
                <row A="0.0"/>
                <row A="0.0"/>
                <row A="0.0"/>
            </table>
        </parameter>
    </group>
    <group id="default" readonly="false" modified="true">
        <validPeriod>
            <timeZone>0.0</timeZone>
            <startDate date="2012-09-09" time="12:00:00"/>
            <endDate date="2012-09-27" time="12:00:00"/>
        </validPeriod>
        <parameter id="UHG_DURATION" name="UHG_DURATION">
            <intValue>6</intValue>
        </parameter>
        <parameter id="UNIT" name="UNIT">
            <stringValue>ENGLISH</stringValue>
        </parameter>
        <parameter id="UHG_INTERVAL" name="UHG_INTERVAL">
            <intValue>6</intValue>
        </parameter>
        <parameter id="DRAINAGE_AREA" name="DRAINAGE_AREA">
            <dblValue>3103.0</dblValue>
        </parameter>
        <parameter id="CONSTANT_BASE_FLOW" name="CONSTANT_BASE_FLOW">
            <dblValue>0.0</dblValue>
        </parameter>
        <parameter id="UHG_ORDINATES" name="UHG_ORDINATES">
            <table>
                <columnTypes A="double"/>
                <row A="8666.18"/>
                <row A="19498.05"/>
                <row A="33941.3"/>
                <row A="46217.72"/>
                <row A="24331.23"/>
                <row A="50550.24"/>
                <row A="23027.725"/>
                <row A="36829.26"/>
                <row A="28885.35"/>
                <row A="21664.88"/>
                <row A="15165.53"/>
                <row A="9387.31"/>
                <row A="6282.09"/>
                <row A="4476.97"/>
                <row A="3033.57"/>
                <row A="1949.57"/>
                <row A="1155.65"/>
                <row A="577.82"/>
                <row A="288.91"/>
                <row A="71.65"/>
                <row A="0.0"/>
                <row A="0.0"/>
                <row A="0.0"/>
                <row A="0.0"/>
                <row A="0.0"/>
                <row A="0.0"/>
                <row A="0.0"/>
                <row A="0.0"/>
            </table>
        </parameter>
    </group>
</parameters>


Time series modifiers

Time series modifiers modify time series. It is possible to apply more than 1 modifier to a single time series. A single time series modifier can be applied to multiple time series. The original time series will always be left unchanged in the database. When a time series is retrieved from the database first the original time series will be retrieved. After retrieving the time series from the database the modifiers will be applied to the time series. The modifiers will be applied from old to new. Rating curves can also be modified in FEWS. Since rating curves are considered to be a form of time series, rating curve modifiers are a special type of time series modifiers.  Time series modifiers can be created by using the modifiers panel or by modifying a time series directly in the time series plot or time series table.

Config options which apply to all modifiers

The following config options apply to all modifier types. 

restoreModifiersWhenApprovingForecastRun

In the forecast manager it is possible to approve a forecast. If this option is enabled the modifiers which were applied in this run will restored. 

rollbackOverlappingModifiers

If an OC detects that another user committed new modifiers which overlap with local non-finalized modifiers then these local modifiers will be rolled back. 

autoCommit

By default, local modifiers are committed when the user starts a server run in which these modifiers are used. When this option is enabled the modifiers will be committed directly after the moment they are changed.


Valid time

The behaviour of the valid time for simulated time series and external historical time series is as follows:

When modifiers are defined in the period before valid time, they will always be valid.

The situation changes when modified values are placed in the future. When the valid time is on or after time zero, all modified values are valid and will be used.

Later, when time has proceeded and valid time is before time zero, the modified values AFTER valid time are not valid anymore.



The behaviour of the valid time for external forecasting time series is as follows:

If a modifier has a valid time then it will only be applied if the external forecast time is the same as the valid time. If a modifier doesn't have a valid time then it will always be valid.


Assigning modifiers to whatifs

By default, modifiers are always applied to the workflow

With the introduction of the new WhatIf Templates/WhatIf Editor functionality in 2021.01, one can configure the system to allow modifiers to be created in the What-If Editor and only to be applied in a whatif.

This behavior is specified in element <whatIfModifierType> available in each modifierType, which offers four options:

  1. always apply in workflow (default)
  2. apply according to creation method (since 2022.02)
  3. apply modifier if referenced in a what-if workflow
  4. never apply in a what-if workflow (i.e. always apply unless running a workflow with a whatif attached)

ModifierTypes configured with case 1 (always apply in workflow) represent the default behaviour. The associated Modifiers can be created in the ModifiersDisplay or in the TimeSeriesDisplay. These modifiers can not be created in the WhatIf Editor.

ModifierTypes configured with case 2 (apply according to creation method) can be created in the ModifiersDisplay or in the WhatIf Editor. When created in the ModifiersDisplay the modifier will apply in the regular forecast workflow, but will never be applied in a what-if forecast workflow. When created in the WhatIf Editor, theyare tied to a specific what-if and will only be applied in the associated what-if forecast workflow.

ModifierTypes configured with case 3 (apply modifier if referenced in a whatif workflow) can only be created in the WhatIf Editor. The created modifier is directly associated with the whatif-instance and will only be applide in a whatif workflow. The created modifier will never be applied in a regular workflow.

ModifierTypes configured with case 4 (never apply in a what-if workflow) allows creation of modifiers in the ModifiersDisplay or in the TimeSeriesDisplay. These modifiers can not be created in the WhatIf Editor.the created modifier will only apply in a regular forecast and not in a what-if forecast.

Modifiers can become part of a what-if by referencing the modifierType in the whatifTemplates.

Visibility of modifiers in the IFD

When a modifier is of a type without a What-if modifier type configured then the modifier is visible when the modifier is used at the selected topology node or what-if node. But when the modifier is of a type with a What-If modifier type configured then different rules apply.

What-If modifier typeTopology NodeWhat-If Node
always apply in workflow (default)visible when applicable for the selected nodevisible when applicable for the selected node
never apply in what-if workflowsvisible when applicable for the selected nodenever visible
apply if referenced in what-if workflownever visiblevisible when applicable for the selected node
apply according to creation methodvisible when applicable for the selected nodenever visible


Location attribute modifiers

Currently there is only one type of modifier, the locationAttributeModifier, available to modify location attributes. This type has however a lot of configuration options so it can be used in a lot of different ways.

Location Attribute Modifier

This type is the only type available to modify location attributes. The section will explain the available configuration options in detail.

Basic examples

Although this modifier type offers a lot of configuration options, it is possible to configure a basic location attribute modifier without much effort.

Below an example.

		<locationAttributeModifier id="example" name="example">
			<modifiableGroup name="exampleGroupA">
				<locationSetId>MODIFIABLE_PROJECTS_QO_Avg_Min</locationSetId>
				<attribute id="wQO_Avg_Req_Day_RT">
					<comment>Original value: @wQO_Avg_Req_Day_RT@</comment>
				</attribute>
				<attribute id="wQO_Avg_Min_Day_RT">
					<comment>Original value: @wQO_Avg_Min_Day_RT@</comment>
				</attribute>
			</modifiableGroup>
		</locationAttributeModifier>

The basic example above configures a modifier which can be used to modify two attributes of all the locations in locationSet MODIFIABLE_PROJECTS_QO_Avg_Min.

Below a screenshot of this modifier in the modifiers panel.

The modifier shows the original and the modified values by default. To hide the original values you can use the option <showOriginalValues>

<locationAttributeModifier id="example" name="example">
			<modifiableGroup name="exampleGroupA">
				<locationSetId>MODIFIABLE_PROJECTS_QO_Avg_Min</locationSetId>
				<attribute id="wQO_Avg_Req_Day_RT">
					<comment>Original value: @wQO_Avg_Req_Day_RT@</comment>
				</attribute>
				<attribute id="wQO_Avg_Min_Day_RT">
					<comment>Original value: @wQO_Avg_Min_Day_RT@</comment>
				</attribute>
				<tabularLayout>
					<showOriginalValues>false</showOriginalValues>
				</tabularLayout>
			</modifiableGroup>
</locationAttributeModifier>

When this option is set to false, the original values will be hidden in the panel.

In the example above the attributes are located in the rows of the table and the locations are positioned in the columns of the table. To switch the locations to the rows and the attributes to the columns the option <locationOrientation> can be used.

Below an example.

<locationAttributeModifier id="example" name="example">
			<modifiableGroup name="exampleGroupA">
				<locationSetId>MODIFIABLE_PROJECTS_QO_Avg_Min</locationSetId>
				<attribute id="wQO_Avg_Req_Day_RT">
					<comment>Original value: @wQO_Avg_Req_Day_RT@</comment>
				</attribute>
				<attribute id="wQO_Avg_Min_Day_RT">
					<comment>Original value: @wQO_Avg_Min_Day_RT@</comment>
				</attribute>
				<tabularLayout>
					<showOriginalValues>false</showOriginalValues>
					<locationOrientation>row</locationOrientation>
				</tabularLayout>
			</modifiableGroup>
</locationAttributeModifier>

Below a screenshot of the display.

 In the examples above only one modifiableGroup was defined. It is also possible to define a location attribute modifier with multiple modifiableGroups. Below a config example.

<locationAttributeModifier id="example" name="example">
			<modifiableGroup name="exampleGroupA">
				<locationSetId>MODIFIABLE_PROJECTS_QO_Avg_Min</locationSetId>
				<attribute id="wQO_Avg_Req_Day_RT">
					<comment>Original value: @wQO_Avg_Req_Day_RT@</comment>
				</attribute>
				<attribute id="wQO_Avg_Min_Day_RT">
					<comment>Original value: @wQO_Avg_Min_Day_RT@</comment>
				</attribute>
				<attribute id="QO_Avg_Min_Week_constraintType_RT">
					<selection>
						<predefined>
							<option>hard</option>
							<option>soft</option>
						</predefined>
					</selection>
					<comment>Original value: @QO_Avg_Min_Week_constraintType_RT@</comment>
				</attribute>
				<tabularLayout>
					<showOriginalValues>false</showOriginalValues>
					<locationOrientation>row</locationOrientation>
				</tabularLayout>
			</modifiableGroup>
			<modifiableGroup name="exampleGroupB">
				<locationSetId>MODIFIABLE_PROJECTS_QO_Avg_Min</locationSetId>
				<attribute id="wQO_Avg_Min_Week_RT"/>
			</modifiableGroup>
</locationAttributeModifier>

 Because there are two modifiable groups defined in the config, the display will show two tabs instead of only one.

Attribute config options

The following config options are available for the <attribute> element:

  • read only,
  • visible,
  • timeSeriesValueClosestToStateSelectionStartTime,
  • useSystemTimeAsDefaultvalue,
  • useTimeOfFirstReliableValueInTimeSeries,
  • selection,
  • conditional selection,
  • comment.

Read only

This option will make attribute read-only in the display

Visible

It is possible to configure an export-button in the location attribute panel. In some cases it is necessary to export a complete set of location attributes which includes attributes which should not be editable or visible in the location attribute modifiers panel. For this special case it is possible to define location attributes which are invisible. These attributes will be exported to file but will not be editable in the location attribute modifiers panel.


TimeSeriesValueClosestTostateSelectionStartTime

This option can be used to define a set time series from which the value of the attribute should be derived.  

The value will be determined in the following way:

  1. Select the time series from the defined set which has the same location as the location from the location attribute,
  2. Select the value at the selected state time from the IFD. If a state selection period is defined the start of the period will be used to select a value.

Below a config example.

<attribute id="URBS_IL_AWRA">
					<timeSeriesValueClosestToStateSelectionStartTime>
						<timeSeriesSet>
							<moduleInstanceId>AWRAGrid_To_SubCatchments</moduleInstanceId>
							<valueType>scalar</valueType>
							<parameterId>AWRA.IL</parameterId>
							<locationSetId>AUS_URBS_subcatchments</locationSetId>
							<timeSeriesType>external historical</timeSeriesType>
							<timeStep unit="day"/>
							<relativeViewPeriod unit="day" start="-14" end="0"/>
							<readWriteMode>read only</readWriteMode>
						</timeSeriesSet>
					</timeSeriesValueClosestToStateSelectionStartTime>
					<comment>No advice</comment>
</attribute>

useSystemTimeAsDefaultValue

This element can be used define a default value for a date/time attribute. If this option is selected the initial value is set to the system time. When this option is used a checkbox will be shown after the date/time selection box. If this checkbox is selected then a modifier will be created for this attribute with the current value of the date/time box. When an existing modifier is selected and there is a modified value for the attribute in this modifier then the checkbox will also be selected.

useTimeOfFirstReliableValueInTimeSeries

This option is similar to the option useSystemTimeAsDefaultValue, but instead of setting the default value to the system time the default time will be derived from a time series. A time series set can be configured for this option. The first time of the time series array for which a reliable value is available will be used.

Selection

The element <selection> can be used to predefine the list of options which are available for a certain attribute. The predefined list op options can be defined by:

  • a list of location id's,
  • a location set,
  • a hard-coded predefined list of options,
  • a multi-value attribute which contains all the options which are available.

Below an example of a hard-coded list of options.

<attributeModifiers>
		<locationAttributeModifier id="example" name="example">
			<modifiableGroup name="exampleGroupA">
				<locationSetId>MODIFIABLE_PROJECTS_QO_Avg_Min</locationSetId>
				<attribute id="wQO_Avg_Req_Day_RT">
					<comment>Original value: @wQO_Avg_Req_Day_RT@</comment>
				</attribute>
				<attribute id="wQO_Avg_Min_Day_RT">
					<comment>Original value: @wQO_Avg_Min_Day_RT@</comment>
				</attribute>
				<attribute id="QO_Avg_Min_Week_constraintType_RT">
					<selection>
						<predefined>
							<option>hard</option>
							<option>soft</option>
						</predefined>
					</selection>
					<comment>Original value: @QO_Avg_Min_Week_constraintType_RT@</comment>
				</attribute>
				<tabularLayout>
					<showOriginalValues>false</showOriginalValues>
					<locationOrientation>row</locationOrientation>
				</tabularLayout>
			</modifiableGroup>
			<modifiableGroup name="exampleGroupB">
				<locationSetId>MODIFIABLE_PROJECTS_QO_Avg_Min</locationSetId>
				<attribute id="wQO_Avg_Min_Week_RT"/>
			</modifiableGroup>
</locationAttributeModifier>

 The display will look like the example below.

 Conditional selection

The conditional selection can be used to disable other attributes depending on which option is selected for an attribute. For example if option A is selected for a certain attribute X then attribute Y should be disabled and attribute Z should be enabled. If option B is selected then attribute Z should be disabled and attribute Y should be enabled. Below an example.

<locationAttributeModifier id="example" name="example">
			<modifiableGroup name="exampleGroupA">
				<locationSetId>MODIFIABLE_PROJECTS_QO_Avg_Min</locationSetId>
				<attribute id="wQO_Avg_Req_Day_RT">
					<comment>Original value: @wQO_Avg_Req_Day_RT@</comment>
				</attribute>
				<attribute id="wQO_Avg_Min_Day_RT">
					<comment>Original value: @wQO_Avg_Min_Day_RT@</comment>
				</attribute>
				<attribute id="QO_Avg_Min_Week_constraintType_RT">
					<conditionalSelection>
						<option value="hard">
							<disabledAttributeId>wQO_Avg_Req_Day_RT</disabledAttributeId>
						</option>
						<option value="soft">
							<disabledAttributeId>wQO_Avg_Min_Day_RT</disabledAttributeId>
						</option>
					</conditionalSelection>
					<comment>Original value: @QO_Avg_Min_Week_constraintType_RT@</comment>
				</attribute>
				<tabularLayout>
					<showOriginalValues>false</showOriginalValues>
					<locationOrientation>row</locationOrientation>
				</tabularLayout>
			</modifiableGroup>
</locationAttributeModifier>

If the option hard is selected, the attribute wQO_Avg_Req_Day_RT should be disabled. If the second option is selected the attribute wQO_Avg_Min_Day_RT should be disabled. Below an example of the display


Comment

The bottom line of the display shows the comment for each attribute. The comment can be defined by using this element. It is possible to use location attribute in the comment. The unmodified value of the defined attribute will be used in the comment. Below an example.

<attribute id="QO_Avg_Min_Week_constraintType_RT">
					<conditionalSelection>
						<option value="hard">
							<disabledAttributeId>wQO_Avg_Req_Day_RT</disabledAttributeId>
						</option>
						<option value="soft">
							<disabledAttributeId>wQO_Avg_Min_Day_RT</disabledAttributeId>
						</option>
					</conditionalSelection>
					<comment>Original value: @QO_Avg_Min_Week_constraintType_RT@</comment>
</attribute>

Define which locations are modifiable

To define from which locations the attributes can be modified there are 3 options available:

  1. locationSetId,
  2. locationId,
  3. timeSeries

When the first two options are used the set of modifiable locations is determined in the following way. After selecting a topology node the module config quick scanner will determine which locations are available in the workflow of the selected node. The intersection of the locations which are found for the selected node and the configured locations (by either a location set or a list of locations) is the set of modifiable locations for the selected node.

The option timeSeries can be used to define a filter. First all the time series which are  used in the topology workflow are determined. Then the found time series are filtered by using the defined filter the locations of the resulting time series are the modifiable locations for a toplogy node.

Below a configuration example of the option <timeSeries>.

<modifiableGroup name="exampleGroupA">
				<timeSeries>
					<parameterId>QO</parameterId>
				</timeSeries>
				<attribute id="wQO_Avg_Req_Day_RT">
					<comment>Original value: @wQO_Avg_Req_Day_RT@</comment>
</attribute>


Export file

If this option is configured an additional button "export" will be shown in the modifiers display. It is possible to export the location attribute modifiers to dbf-format or csv-format. Each modifierGroup will be exported to a separate file. In addition a file called description.txt will be exported. This file will contain general information about the exported modifier. By default the data will be exported to dbf-format. Below an example of a location attribute modifier which is exported to csv-format.

Location id,URBS_LOSSTYPE,URBS_IL,URBS_CL,URBS_PR,URBS_IF,URBS_ILMX,URBS_RF,URBS_IFRF
tweed_eungella,ILCL,2.0,22.0,0.0,1.0E31,0.0,0.0,0.0

 Below an example.

<locationAttributeModifier id="example" name="example">
			<exportFile>
				<fileName>example</fileName>
				<exportAllAttributes>true</exportAllAttributes>
				<dataFormat>csv</dataFormat>
			</exportFile>
			<modifiableGroup name="exampleGroupA">
				<locationSetId>MODIFIABLE_PROJECTS_QO_Avg_Min</locationSetId>
				<attribute id="wQO_Avg_Req_Day_RT">
					<comment>Original value: @wQO_Avg_Req_Day_RT@</comment>
				</attribute>
				<attribute id="wQO_Avg_Min_Day_RT">
					<comment>Original value: @wQO_Avg_Min_Day_RT@</comment>
				</attribute>
				<tabularLayout>
					<showOriginalValues>false</showOriginalValues>
					<locationOrientation>row</locationOrientation>
				</tabularLayout>
			</modifiableGroup>
</locationAttributeModifier>

The element <fileName> is used to define the name of export file. The element <exportAllAttributes> can be used to define if only the visible attributes (exportAllAttributes=false) should be exported or all the attributes (exportAllAttributes=true). Currently two dataFormats are supported for the export function csv and dbf. The dataFormat can be configured by using the element <dataFormat>. Below an example of a modifier with the element <exportFile> configured.

 

Summary function

The lower panel of the modifier display shows the details of the selected modifier. The upper section shows the list of modifiers for the selected topology node. Each modifier has a summary. By default Delft-FEWS will generate a summary based on the available information about the modifier. For the location attribute modifiers it is possible to configure a custom summary by using the element <summaryFunction>. In the <summaryFunction> element it is possible to include location attributes. When a summaryFunction element is added to the locationAttributeModifer, only the modifiers included in the summaryFunction will be shown. If a location attribute included in this summaryFunction is modified it will be coloured blue and bold to indicate that the value is modified. If a location attribute in the summaryFunction is not modifierd the value will be shown with original black font colour.

An example iof the summaryFunction s shown below.

	<locationAttributeModifier id="example" name="example">
			<exportFile>
				<fileName>example</fileName>
				<exportAllAttributes>true</exportAllAttributes>
				<dataFormat>csv</dataFormat>
			</exportFile>
			<modifiableGroup name="exampleGroupA">
				<locationSetId>MODIFIABLE_PROJECTS_QO_Avg_Min</locationSetId>
				<attribute id="wQO_Avg_Req_Day_RT">
					<comment>Original value: @wQO_Avg_Req_Day_RT@</comment>
				</attribute>
				<attribute id="wQO_Avg_Min_Day_RT">
					<comment>Original value: @wQO_Avg_Min_Day_RT@</comment>
				</attribute>
				<tabularLayout>
					<showOriginalValues>false</showOriginalValues>
					<locationOrientation>row</locationOrientation>
				</tabularLayout>
				<summaryFunction>My summary= @wQO_Avg_Req_Day_RT@</summaryFunction>
			</modifiableGroup>
		</locationAttributeModifier>


Below an example of the modifiers display.

Layout

To define the layout of the modifier it is possible to use the options:

  • tabularLayout
  • panelLayout

The option tabularLayout is used in the majority of the examples above, this option can be used to display the modifiable groups in a tab panel. Each modifiable group will have its own tab. The panel layout can be used to show the modifiable groups in a single panel.

A config example is shown below.

<locationAttributeModifier id="example" name="example">
			<modifiableGroup name="exampleGroupA">
				<locationSetId>MODIFIABLE_PROJECTS_QO_Avg_Min</locationSetId>
				<attribute id="wQO_Avg_Req_Day_RT">
					<comment>Original value: @wQO_Avg_Req_Day_RT@</comment>
				</attribute>
				<attribute id="wQO_Avg_Min_Day_RT">
					<comment>Original value: @wQO_Avg_Min_Day_RT@</comment>
				</attribute>
				<panelLayout>
					<tableLayout id="panelIdA">
						<title>layoutA</title>
						<defaultColumnWidth>150</defaultColumnWidth>
						<attributeId width="200">wQO_Avg_Req_Day_RT</attributeId>
						<locationOrientation>row</locationOrientation>
					</tableLayout>
					<tableLayout id="panelIdB">
						<title>layoutB</title>
						<defaultColumnWidth>300</defaultColumnWidth>
						<attributeId width="400">wQO_Avg_Min_Day_RT</attributeId>
						<locationOrientation>row</locationOrientation>
					</tableLayout>
				</panelLayout>
				<summaryFunction>My summary= @wQO_Avg_Req_Day_RT@</summaryFunction>
			</modifiableGroup>
			<template id="panelIdA" name="A">
				<panel>
					<panelId>panelIdA</panelId>
					<position column="1" row="1"/>
				</panel>
				<panel>
					<panelId>panelIdB</panelId>
					<position column="2" row="1"/>
				</panel>
			</template>
</locationAttributeModifier>

The panel layout section defines two tableLayout sections. In the template section both table layouts are positioned on the panel. In the example the panels are placed in a grid with 1 row and 2 columns. Below an example of the display.

The template section should always be used in combination with the panelLayout because the template section defines how the panels of the template section should be displayed.

Editing  attributes using  math operands

To change the  location attributes using math operands,  select one or more attributes,  open with right mouse click  the popup menu and select menu item “Apply operation…” (Ctrl+O). 

An  “Apply Operation” dialog will appear :

Select an operand and enter the value. Use button “Apply” to apply the operation to the selected value(s) . Use button “Apply to table” to apply the operation to all numeric values in the table.

The (changed) location attribute modifier can also be applied to multiple locations. For this purpose the button “Apply to …” can be used.
Note that “Apply to …” button only becomes visible when we are modifying attributes for a single location.

Multi-value attribute modifiers

Multi-value attribute modifier is intended to modify multi-value location attributes, for example pump curves.  An example:


Both attribute head and discharge are multi-value attributes

The values are modified in a table-popup that can be opened from the normal locationattribute modifier table by clicking on a cell-button.
The table-popup is updated every time the cell-button is clicked. To confirm the changes in the table-popup, press OK button.  To get the original values back, press Reset button.

Similar to all other modifier types,  the modified table  will be stored as a modifier after pressing  button Apply

The configuration associated with the head-discharge example can be found below. Note that it is possible to set a column to read only using <attributeId readOnly="true">head</attributeId>

<locationAttributeModifier id="HeadDichargeTable" name="HeadDichargeTable">
	<modifiableGroup name="HeadDichargeTables">
	 	<locationSetId>AllLocations</locationSetId>
		
		<attributesTable id="head-dicharge">
		    <attributeId>head</attributeId>
		    <attributeId>discharge</attributeId>
		</attributesTable>
		
		<tabularLayout>
			 <showOriginalValues>false</showOriginalValues>
			 <locationOrientation>row</locationOrientation>
		</tabularLayout>
	</modifiableGroup>
</locationAttributeModifier>


Multi-value attributes  and single-value attributes can be combined in one modifiableGroup . An example:

 The modified multi-value tables together with the  single-value modified attributes will be stored after pressing button Apply.

The configuration associated with this example can be found below:

<locationAttributeModifier id="HeadDichargeTable" name="HeadDichargeTable">
	<modifiableGroup name="HeadDichargeTables">
	 	<locationSetId>AllLocations</locationSetId>
		
		<attribute id="status"/>
		
		<attributesTable id="head-dicharge">
		    <attributeId>head</attributeId>
		    <attributeId>discharge</attributeId>
		</attributesTable>
		
		<attribute id="power"/>
		
		<tabularLayout>
			 <showOriginalValues>false</showOriginalValues>
			 <locationOrientation>row</locationOrientation>
		</tabularLayout>
	</modifiableGroup>
</locationAttributeModifier>


Multi-value attribute modifier supports number and text attributes. It does not support boolean and date-time attributes (yet)
Also, it supports only layout with locationOrientation=row


ShiftDateTimeModifier

This modifier can be used to modifiy a single date/time attribute. The default value of the date/time attribute can be configured.

It is possible to define an offset and a time step. The initial value in the display will determined by adding the offset to the time zero of the node. After that the calculated time will be shifted toward the first valid time of the configured time step.

The date/time box in the modifiers panel has label. The content of this label can be configured in the modifierTypes.xml. It is also possible to configure a editablePeriodTimeSeries.

The value of the date/time attribute should always be in the period for which the configured time series has reliable data.

The user can also set the valid time of the date/time attribute modifier. When the time zero of a run is beyond the valid time of the modifier then the modifier will no longer be applied.

The default value of the valid time can be configured by configuring an offset. The default value of the valid time will be set to time zero plus the offset.

<attributeModifiers>
		<shiftDateTimeModifier id="shiftDateTimeModifier" name="shiftDateTimeModifier">
			<attributeId>wMarketChoice_RT</attributeId>
			<locationId>BPA</locationId>
			<defaultModifierTime>
				<offset unit="day"/>
				<timeStep unit="day"/>
			</defaultModifierTime>
			<customLabel>My custom label text</customLabel>
			<editablePeriodTimeSeries>
				<moduleInstanceId>Publish_RT</moduleInstanceId>
				<valueType>scalar</valueType>
				<parameterId>GN_Sim</parameterId>
				<locationId>BPA</locationId>
				<timeSeriesType>simulated forecasting</timeSeriesType>
				<timeStep unit="hour"/>
				<relativeViewPeriod unit="day"  start="0" startOverrulable="false" end="24" endOverrulable="false"/>
				<readWriteMode>read only</readWriteMode>
			</editablePeriodTimeSeries>
			<offsetValidTime unit="day"/>
		</shiftDateTimeModifier>
	</attributeModifiers>

  

Module parameter modifiers

Module parameter modifiers can be used to modify module parameters. The most common usage is to modify the module parameters of a model directly but it is also possible to modify transformations with this modifier.

To modify the parameters of a transformation the transformation must have a module parameter file configured. 

Module parameter modifiers

Module parameter modifiers are used to modify module parameter file which are used by a model. Currently there are two types available:

  • module parameter modifier
  • multiple model parameter modifier

Module parameter modifier

The module parameter modifier is a generic module parameter file editor which can be used to modify every module parameter file.
It is possible to limit the number of module parameter files which can be modified by applying a filter. It is possible to have
more than one module parameter modifier type configured in a Delft-FEWS application.

An example of the use of this modifier is the BASEFLOW-modifier available in NWS (National Weather Service) applications. This modifier modifies the BASEFLOW-parameter of the UNITHG-
model.

Below an example of a module parameter modifier.

<moduleParameterModifier id="baseflow" name="baseflow">
        <filter>
            <moduleParameterId>CONSTANT_BASE_FLOW</moduleParameterId>
        </filter>
        <defaultValidTime/>
        <overwriteParameterValues>true</overwriteParameterValues>
</moduleParameterModifier>


Below an example of the display of a module parameter modifier


With the element <filter> can be identified which module parameter files can be modified. In the example above every module parameter file with the element CONSTANT_BASE_FLOW can be modified. The filter is also used to filter which part of the module parameter file can be modified. In the example below only the module parameters with id CONSTANT_BASE_FLOW are editable by this modifier. 

Multiple model parameter modifier

This type of modifier can also be used to modify module parameter files of models. The difference with the module parameter modifier type is that this type can be used to modify multiple parameter files with a single modifier. This type of modifier is mainly used for calibration purposes but it can also be used in an operational environment. Below an basic example of this modifier.

    <multipleModuleParameterModifier id="example" name="example">
        <numberParameter id="SCF"/>
    </multipleModuleParameterModifier>

The configuration above declares that all module parameter files which have parameter SCF can be modified with the modifier "example". Below an example of the display of this modifier.

The display will show all the module parameter files of the selected segment which have a parameter SCF. In this case there are two module parameter files which have parameter SCF. It is possible to define a minimum and/or a maximum value for the applied changes to a certain parameter. Below an example.

    <multipleModuleParameterModifier id="example" name="example">
        <numberParameter id="SCF">
            <minimumValue>0.1</minimumValue>
            <maximumValue>10</maximumValue>
        </numberParameter>
    </multipleModuleParameterModifier>


If an invalid value is entered then the display will show an error.


In addition it is also possible to keep the difference of the parameter value between models the same (interModelRelation = preserve difference) or keep the ratio of the values of a parameter the same between models (interModelRelation = preserve ration). Below an configuration example.

<multipleModuleParameterModifier id="example" name="example">
        <numberParameter id="SCF">
            <minimumValue>0.1</minimumValue>
            <maximumValue>10</maximumValue>
        </numberParameter>
        <numberParameter id="SI">
            <interModelRelation>preserve difference</interModelRelation>
        </numberParameter>
</multipleModuleParameterModifier>


If the user changes the value of the parameter SI of one of the module parameter files then the values of the SI parameter of the other module parameter will automatically be adjusted so that the difference between the values is still the same. In the example below the difference between the two values of SI is 550.

If the user changes the value of the SI parameter of the first model to 560 then the value of the SI parameter of the second model will change to 1060 to keep the difference the same.

To keep the ratio between the parameter values the same you should set the interModelRelation to preserve ratio

It is also possible to define a relation between parameter values of the same module parameter file. It is possible to keep the difference or the ratio between two different parameter values the same. Below an configuration example.

<multipleModuleParameterModifier id="example" name="example">
        <numberParameter id="SCF">
            <minimumValue>0.1</minimumValue>
            <maximumValue>10</maximumValue>
        </numberParameter>
        <numberParameter id="SI">
            <intraModelRelation>
                <relatedModuleParameterId>SCF</relatedModuleParameterId>
                <relation>preserve difference</relation>
            </intraModelRelation>
        </numberParameter>    
</multipleModuleParameterModifier>

In the example above the difference between the parameter SCF and SI will be kept the same.

Module parameters which are a table can by default be changed by using the table editor.

For tables with only a single column of values it is possible to define this parameter value as a singleTableRowParameter.

Below an config example.

 <singleTableRowParameter id="AREA_DEPLETION_CURVE">
            <xAxisTitle>WE/A(i)</xAxisTitle>
            <yAxisTitle>Areal extent of snow cover (percent)</yAxisTitle>
            <switchAxis>true</switchAxis>
            <columnName>0</columnName>
            <columnName>0.1</columnName>
            <columnName>0.2</columnName>
            <columnName>0.3</columnName>
            <columnName>0.4</columnName>
            <columnName>0.5</columnName>
            <columnName>0.6</columnName>
            <columnName>0.7</columnName>
            <columnName>0.8</columnName>
            <columnName>0.9</columnName>
            <columnName>1.0</columnName>
 </singleTableRowParameter>


The example below shows that the AREA_DEPLETION_CURVE has a button "curve".

After selecting this button the following display will be openened.

The values can editted by changing the values in the table and by clicking in the graph.


It is also possible to edit multiple parameters by using the <userDefinedXYEditor> option.


An config example is given below.

        <userDefinedXYEditor>
            <xAxisParameterId>percolation demand</xAxisParameterId>
            <xAxisTitle>lzdefr</xAxisTitle>
            <invertXAxis>true</invertXAxis>
            <yAxisTitle>percolation demand</yAxisTitle>
            <xAxisStart>0</xAxisStart>
            <xAxisEnd>1</xAxisEnd>
            <xAxisScaleUnit>0.1</xAxisScaleUnit>
            <expression>(LZFPM*LZPK + LZFSM* LZSK)*(1+ZPERC*lzdefr^REXP)</expression>
        </userDefinedXYEditor>


If a this option is used a button will appear at the bottom of the table, after clicking this button the following display will appear.

The values of the parameters used in the expression can be editted by changing the values in the table. By default 1 new set of values is available for edit.

By clicking the add button more lines can be added. By selecting a row in the table and pressing apply a new set of parameter values can be  applied.

Change ordinates modifier


This modifier can be used to change the ordinates of the module parameter file of the unit Hydrograph-model.

The ordinates can be changed in the table or in the graph. When the user presses the apply button the ordinates are adjusted by using a volume-correction.

The volume correction will ensure that the volume without the modifier applied is the same as the volume of unit hydrograph after the modifier is applied.

Display

Below an example of the display of this modifier.




configuration example

<unitHydrographModifiers>
		<changeOrdinatesModifier id="unithg" name="unithg">
			<defaultStartTime>start run</defaultStartTime>
			<defaultEndTime>end run</defaultEndTime>
			<defaultValidTime/>
			<overwriteParameterValues>false</overwriteParameterValues>
		</changeOrdinatesModifier>
</unitHydrographModifiers>


defaultStartTime
The default start time of the modifier. The available options are startrun and time zero. It corresponds to the same fields in the modifier display. This is only a default value, which can be changed by the user.

defaultEndTime
The default end time of the modifier. The available options are time zero and end run. It corresponds to the same fields in the modifier display. This is only a default value, which can be changed by the user.

offsetDefaultEndTime
The offset of the end time compared to the option defined in defaultEndTime. For example when the defaultEndTime of the modifier is set to 'end run' and an offset of 100 days is defined then the default end time of the modifier
will be set to 'end run' plus 100 days. It corresponds to the same fields in the modifier display. This is only a default value, which can be changed by the user.

defaultValidTime
If this option is configured than a valid time can be chosen for this modifier. The valid time always default to time zero.

Transformation module parameter modifiers

Reverse order modifiers

This modifier can be used to reverse the data hierarchy of the merge simple transformation.

When this modifier is active on the transformation the data hierachy is reversed.

An example of the use of this modifier is the switchts-modifier of the NWS. With this modifier the forecasters temporarily favor one timeseries above the other because the timeseries which normally is used as the primary timeseries is considered to be less reliable.

Display

Below an example of the display of a reverse order modifier. 

The  time series  that should be reversed are shown in the table and plot . These time series match the input variables configured in the transformation <merge><simple>. The first time series in the table matches the first input variable, the second one matches the second input variable.

The forecaster can only set a start- and end time of the modifier. If configured it is also possible to enter a valid time for this modifier.

.


It is also possible to reset the valid time to the current system time by clicking on the refresh button , as shown below. If an offset is configured, then the valid time would be reset to: T0 (current system time) + the configured offset.



Configuration example

<mergeSimpleModifiers>
		<reverseOrderModifiers id="switchts" name="SWITCHTS">
			<defaultStartTime>start run</defaultStartTime>
			<defaultEndTime>time zero</defaultEndTime>
		</reverseOrderModifiers>
</mergeSimpleModifiers>


defaultStartTime

The default start time of the modifier. The available options are startrun and time zero. It corresponds to the same field in the modifier display.

defaultEndTime
The default end time of the modifier. The available options are time zero and end run. It corresponds to the same fields in the modifier display.

defaultValidTime
If this option is configured than a valid time can be choosen for this modifier. The valid time always default to time zero. It corresponds to the same fields in the modifier display. 


Blending steps modifier

The blending steps modifier is a modifier which can only be used in combination with the transformation <adjust><adjustQ>.

The adjustQ-transformation should also have a moduleparameterfile configured.

Below an example.

	<transformation id="BRGN6NVR">
		<adjust>
			<adjustQUsingObservedInstantaneousDischarge>
				<observedDischarge>
					<variableId>BRGN6_QIN_6</variableId>
				</observedDischarge>
				<simulatedInstantaneousDischarge>
					<variableId>BRGN6TOT_SQIN_6</variableId>
				</simulatedInstantaneousDischarge>
				<moduleParameterFile>ADJUSTQ_BRGN6NVR_BRGN6NVR_UpdateStates</moduleParameterFile>
				<adjustedForecastDischarge>
					<variableId>BRGN6NVR_QINE_6</variableId>
				</adjustedForecastDischarge>
			</adjustQUsingObservedInstantaneousDischarge>
		</adjust>
</transformation>


This transformation uses observed discharges and simulated discharges to create an output timeseries.

One of the parameters of the adjustQ-transformation is the number of blending steps.
This parameter determines in how many steps the blend from the observed time series to the simulated time series is done.
The blending steps modifier is used to modify this parameter. The modifier doesn't have a start- and/or end time and is always valid.
The last applied blending steps modifier is always applied. Only one blending steps modifier can be defined in a fews configuration.

An example of the blending steps modifier is the CHGBLEND-modifier. This modifier is used by the NWS to modify the blending steps of the
adjustQ-operation.

Below is an example of a blending steps modifier. The forecaster can enter the value in the text box and/or change it with the up and down arrows next to the text box.


Below an example of the configuration an adjustQModifier.

<adjustQModifiers>
		<blendingStepsModifier id="CHGBLEND" name="CHGBLEND"/>
</adjustQModifiers>


The only thing the configurator has to configure is the id of the modifier and its name.
By doing this the configuration declares that it is allowed to use the blending steps modifier.

Sample years modifier

The transformation sample historic creates ensembles based on historic time series.
The sample years modifier can only be used in combination with this transformation.


To be able to use this modifier the transformation sample historic should use a module parameter file to define its configuration options. Make sure all the following parameters are defined in the parameter file:


<parameter id="startYear">
 	<intValue>1966</intValue> 
</parameter>
<parameter id="firstEnsembleMemberIndex"> 
	<intValue>1966</intValue>
</parameter> 
<parameter id="ensembleMemberCount"> 
	<intValue>44</intValue> 
</parameter> 
<parameter id="startWaterYear"> 
	<stringValue>--10-01</stringValue> 
</parameter>


An example of the use of this modifier is the modifier HistoricWaterYears which is in use by NWS.
It is used by the forecasters to overrule the default sample years in the transformation.

Display

Below an example of the display of this modifier. 

The forecaster can modifiy the default sample years by changing the start year and end year in the display.


Configuration example

Below an example of the configuration of this modifier.

<sampleHistoricalModifiers> 
	<sampleYearsModifier id="historicwateryears" name="historicwateryears">
</sampleYearsModifier> </sampleHistoricalModifiers>


Disable adjustment modifier

The transformation adjustQ creates a simulated time series by combining observed time series and simulated time series.

When this modifier is applied the observed time series are ignored and the output will be equal to the simulated time series. This modifier can, like the blending steps modifier, only be used in combination with the adjustQ transformation. The adjustQ-transformation should use a moduleparameterfile to define its parameters to be able to use this modifier.

The moduleparameterfile should define the parameter disableAdjustment.

Below an example


<parameters xmlns="http://www.wldelft.nl/fews/PI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.5" xsi:schemaLocation="http://www.wldelft.nl/fews/PI https://fewsdocs.deltares.nl/schemas/version1.0/pi-schemas/pi_modelparameters.xsd"> 
	<group id="default"> 
		<parameter id="blendingSteps"> 
			<intValue>1</intValue> 
		</parameter> 
		<parameter id="interpolationType"> 
			<stringValue>difference</stringValue>
		</parameter>
		<parameter id="disableAdjustment"> <
			<boolValue>false</boolValue> 
		</parameter>
	</group> 
</parameters>


Display

Below an example of the display for this modifier. The forecaster cannot select a start- and/or enddate which means that the modifier will always be active.

Configuration example

The configurator only has to configure the id and the name of the modifier. By doing this, Delft-FEWS knows that it is allowed to use this modifier at a each adjustQ-operation which uses a moduleparameterfile and has the element disableAdjustment in its
moduleparameterfile defined.

<adjustQModifiers> 
	<disableAdjustmentModifier id="espadjq" name="ESPADJQ"/>
 </adjustQModifiers>

Rating curve modifiers

Rating curve modifiers are used to modify a rating curve.  Two modifier types  are available for this purpose :  tableRatingCurveModifier and shiftMultiplyRatingCurveModifier

Table rating curve modifier

This modifier  allows the users  to edit  the rating curve in both the table and the chart. 

Editing in the table

The user can type the stage and discharge  values directly  in the table or use a popup menu to insert, delete, copy and paste  the table rows.  The inserted or copied rows are blue.

Popup menu option 'mark'  can be used to mark the selected table rows as reliable, doubtful or unreliable.

Every time the table is  edited  also the  chart is  updated .  However, the chart is not updated if  the  table  contains any  invalid value, i.e. the stage or discharge  are not ascending. The invalid values have red color.

Editing in the chart

To add a value to the rating curve,  just  click a value in the chart. To delete a value , press Ctrl button and then click the value .   Removing  the points first,  and then clicking the new points is the best approach.

Also, to  move a point , first  remove the point and then add a new point.  Adding arbitrary points does not always  work, since both stages  and discharges must  be  always ascending .

The adding of the points works as follows:  the clicked stage (y value) is used to determine where to insert a new  row, so that the stages stay ascending .
If the clicked new discharge value (x value) makes discharges not ascending anymore, then the new discharge value is automatically computed by taking the closes discharge that fits  the inserted row.

Displaying original  and referenced rating curves

Original and/or  referenced rating curves can  be switched on/off with the buttons above the chart.   Both buttons have  a tooltip.

Use the first button to show the original rating curve . The datum the  rating  is valid from is shown in the legend. 

An example is shown in the picture below:


Use the second  button to show the referenced rating curves . The referenced ratings are all the  other ratings available for the same location.

The picture below shows both the  original and the referenced rating curves:


Configuration example

<ratingCurveModifiers>
	<tableRatingCurveModifier id="tableRC" name="table RC">
		<defaultStartTime>start run</defaultStartTime>
		<defaultEndTime>end run</defaultEndTime>
	</tableRatingCurveModifier>
</ratingCurveModifiers>


Shift rating curve modifier

Rating curve modifiers are used to modify a rating curve. The rating curve can be modified by shifting the whole rating curve a constant value or by multiplying it with a factor. The constant value or the multiplication factor is calculated by the following procedure. The forecaster defines a stage/discharge pair, from the given stage the discharge is calculated by using the rating curve, the difference or factor between the given discharge and the calculated discharge is calculated. This type of modifier is in use by North-Central RFC (NCRFC) one of the River Forecast Centers of the NWS. They use this modifier to temporarily modify the rating curve.

However, when new rating curves are available they are imported in their system.

In addition, when hovering the mouse over the rating curve points in the modifier display, a tooltip is shown which shows the rating id, stage and flow values.

Display

An example of the display of this modifier is shown below. The forecaster can define a stage/discharge pair by defining a pair in the text boxes. However it is also possible to double click on a point in the graph to define a pair. From the defined stage/discharge pair automatically the constant value or multiplication factor is derived, which is displayed besides the given stage/discharge pair.  The radio button at the top of the display can be used to switch between the two types of modifier (constant value or percentage).

Configuration example

<ratingCurveModifiers>
	<shiftMultiplyRatingCurveModifier id="qpcshift" name="qpcshift">
		<defaultStartTime>start run</defaultStartTime>
		<defaultEndTime>end run</defaultEndTime>
		<offsetDefaultEndTime unit="day" multiplier="3"/>
	</shiftMultiplyRatingCurveModifier>
</ratingCurveModifiers>


defaultStartTime
The default start time of the modifier. The available options are startrun and time zero. It corresponds to the same fields in the modifier display. This is only a default value, which can be changed by the user.

offsetDefaultStartTime
The offset start time compared to the option defined in defaultStartTime. For example when an offset of 1 day is configured in this option and the defaultStartTime is set to timezero than the default starttime of the modifier will be set to time zero plus 1 day. It corresponds to the same fields in the modifier display. This is only a default value, which can be changed by the user.

defaultEndTime
The default end time of the modifier. The available options are time zero and end run. It corresponds to the same fields in the modifier display. This is only a default value, which can be changed by the user.

offsetDefaultEndTime
The offset of the end time compared to the option defined in defaultEndTime. It corresponds to the same fields in the modifier display. This is only a default value, which can be changed by the user.

expiryTime
This element can be used to overrule the default expiry time. The expiryTime is not related to the display (and is thus hidden from the user) and can be used to maximize the period a rating table modifier can be applied. This expiryTime is related to the period to which the modifier is applied, it does not indicate the period after which the rating table will be removed by the rollingBarrel. By using this option, you can overrule the default expiryTime.

expiryTimeDeletedModifiers
The expiryTimeDeletedModifiers is related to the rollingBarrel. When a modifier is deleted by the user (in the GUI) it will not be deleted but only set to invisible, so that it can be restored. However, when the expiryTimeDeletedModifiers has passed, the modifier will be removed from the database and the modifier can no longer be restored. So if the expiry time is 50 years, the modifier remains 50 years in the database, visible or invisible.

Time series modifiers

There are several options which apply to all types of time series modifiers.

applyToDeterministicRun

If this option is set to true then the modifier will only apply to deterministic runs.

applyToEnsemble

If you have configured ensemble ids in this section, the modifier will only apply to the configured ensemble ids.

Single value modifiers

A single value modifier is a modifier which modifies only one value at one time step in a time series. The forecaster can define a single value modifier in the modifier panel by selecting a date and a value. The combination of the selected time and value is the definition of the single value modifier.

An example of the use of a single value modifier is the WECHNG-modifier used in several NWS (National Weather Service) applications. This modifier sets the snow water-equivalent for the date specified. The single value modifier is applied to an empty time series which holds after the application of the modifier only the value of the modifier. This time series is used as an input time series to the model. The model adapter reads the time series and knows that it has to change the snow water-equivalent for the mod date to the specified value.

Display

The display for the single value modifiers is shown below.

The user can enter a value in the text box by entering a value and by clicking on the spinner box next to it. The value can also be adjusted by the slider bar.


The date of the modifier can be selected in the area above which the forecaster can enter a value for the modifier. The units of the modifier is shown at the right side of the slider bar.

Configuration example

<singleValueModifier id="wechng" name="wechng">
		<timeSeries>
			<parameterId>WECHNG</parameterId>
		</timeSeries>
		<softLimits>
			<maximumValue>25</maximumValue>
			<minimumValue>0</minimumValue>
		</softLimits>
		<hardLimits>
			<maximumValue>100</maximumValue>
			<minimumValue>0</minimumValue>
		</hardLimits>
		<defaultTime>time zero</defaultTime>
		<defaultValue>1</defaultValue>
</singleValueModifier>


timeSeries

The element timeseries is used to define to which timeseries this modifier can be applied.

softLimits

The slider in the display is bounded to the soft limits defined. However they can be overruled by entering a higher or lower value in the text box.

hardLimits

The values entered in the text box or the slider are bounded by the hard limits defined.

defaultTime

The default time of the modifier. Currently two options are available: time zero and start run.

defaultValue

It is possible to assign a default value to a single value modifier.

In the config example above a default value is configured as the initial value for the modifier.

Below a summary of the options which can be used to define the initial value of the modifier.

default value

This option defines a hard-coded value as the initial value for the modifier

derive a default value from a time series

This option defines a set of time series. The initial value will be derived from the time series which has the same location as the location of the modifier.

From this time series the the value at the time of the modifier will be chosen.

derive default value from a statistical function

The last option allows the forecaster to configure a statistical function from which the value should be derived. Currently only the principal component analysis-functions support this option.

When the principal component analysis is run in the plot display by selecting the principal component analysis-function the output value of this function will be default value for the modifier.

Constant value modifiers

Constant value modifiers are very similar to single value modifiers. But instead of modifying a single value at a particular point in time, they modify a time series over a period of time with a fixed value.

An example of the use of the constant value modifier is the MFC-modifier. This modifier adjusts the melt factor of the snow17-model over the specified period of time with the specified value. It is (just as the WECHNG-modifier) applied to an
empty time series and used as an input time series to the snow17-model.

Display

Below the display of a constant value modifier is shown. Which is very similar to the display of single value modifier.
Note however that this modifier has a start and an end time. The constant value of the modifier can be specified in the
text box or with the slider. The period can be defined by using the start and end date boxes.


Configuration example

<constantValueModifier id="mfc" name="mfc">
		<timeSeries>
			<parameterId>MFC</parameterId>
		</timeSeries>
		<softLimits>
			<maximumValue>3</maximumValue>
			<minimumValue>0</minimumValue>
		</softLimits>
		<hardLimits>
			<maximumValue>10</maximumValue>
			<minimumValue>0</minimumValue>
		</hardLimits>
		<sliderTicksStepSize>1</sliderTicksStepSize>
		<spinnerStepSize>1</spinnerStepSize>
		<defaultStartTime>start run</defaultStartTime>
		<defaultEndTime>end run</defaultEndTime>
		<defaultValidTime/>
		<offsetValidTime unit="day"/>
		<defaultValue>1</defaultValue>
	</constantValueModifier>


timeseries

The user can define a timeseries filter in this element to define to which time series the modifier can be applied.

softLimits

The slider in the display is bounded to the soft limits defined. However they can be overruled by entering a higher or lower value in the text box.

hardLimits

The values entered in the text box or the slider are bounded by the hard limits defined.

sliderTicksStepSize

The step size of the the ticks in the slider.

spinnerStepSize

The step size by which the value in the spinner box increases or decreases by each click on the spinner.

defaultstarttime

The default start time of the modifier can be defined here. It corresponds to the same fields in the modifier display. This is only a default value, which can be changed by the user.

Possible options are: "start run" or "time zero"

defaultendtime

The default end time of the modifier can be defined here. It corresponds to the same fields in the modifier display. These are only default values, which can be changed by the user.

Possible options are: "time zero" or "end run"

defaultValidTime

Forecast time after which the modifier is no longer valid. If omitted, this value will be default to the year 3000 and the valid time entry box will not be shown in the modifier display. Note that the only way to get the validTime option available, is to add: <defaultValidTime/> (without attributes or content)

offsetValidTime

an offset to the default valid time, compared to the T0 of the run

defaultvalue

A default value can be defined here.

Enumeration modifiers

Enumeration modifiers are modifiers in which the user can select an option from a dropdown-list. Each available option in the drop-down list is represented by a value.

This value is applied by the modifier to a period of time.

An example of the use of the eneration modifier is the rain snow modifier from the NWS. In this modifier the forecaster can determine the precipitation in the snow17-model. Only two options are available rain and snow. If the forecaster chooses option rain than
a value of 1 is set into the timeseries, if an option snow is chosen than the value 2 is set into the timeseries at the specified time. The modifier is applied to an empty time series and used an input to the model. The model knows that if value 1 is set into the
timeseries that the user has chosen option rain and that if value is 2 that option snow was chosen.

Display

Below an example of the display for an enumeration modifier.


Configuration example

<enumerationModifier id="rainsnow" name="rainsnow">
		<timeSeries>
			<parameterId>RAINSNOW</parameterId>
		</timeSeries>
		<descriptionEnumeration>choose precipitation:</descriptionEnumeration>
		<enumeration>
			<item text="rain" value="1"/>
			<item text="snow" value="2"/>
		</enumeration>
		<defaultStartTime>start run</defaultStartTime>
		<defaultEndTime>end run</defaultEndTime>
</enumerationModifier>



timeseries

The user can define a timeseries filter in this element.

descriptionEnumeration

Define the text value in the display which is shown before the dropdown list

enumeration

Define the list of options available in the drop down list and its associated value which will be placed into the time series.

defaultstarttime

The default start time of the modifier can be defined here. It corresponds to the same fields in the modifier display. This is only a default value, which can be changed by the user.

Possible options are: "start run" or "time zero"

defaultendtime

The default end time of the modifier can be defined here. It corresponds to the same fields in the modifier display. This is only a default value, which can be changed by the user.

Possible options are: "time zero" or "end run"

Time series modifier

The time series modifier is a modifier which allows the forecaster to modify a timeseries by selecting points in a graph (graphical appointment of modifiers, aka GAM, see below) or by changing values in a modifier table. In most applications of this modifier the forecaster is directly modifying a time series that is used by trasnformations or external models.  It might, for example, be used to directly modify a precipitation time series. This is contrary to how for example the single value modifier WECHNG is used. This modifier modifies an empty time series that is used by a snow17-model for modifying its state based on the input from this modifier. A time series modifier has the following characteristics:

  • The time series modifier has always a start- and end date.
  • The time series modifier can (Optionally, if configured) have a valid time.


The forecaster can modify time series by making changes in table or in the graph. The changes in the graph are made by clicking in the graph.

  • When the user clicks from left to right then the values between the points are interpolated.
  • When the user clicks from right to left only the newly added or changed points are adjusted but no interpolation will be done between the last two points.
  • When more than one time series is shown in the display it is possible to make a selection of which time series should edited when making changes by clicking in the graph.
  • The time series which should be changed can be selected by clicking on the legend of that example time series in the graph.

Besides modifying the time series by editing values in the graph or table, processing functions can be selected from the dropdownbox. Available processing functions are:

  • add
  • subtract
  • multiply
  • divide
  • replace
  • missing
  • ignore time series
  • time series

When one of the options add, subtract, multiply, divide or replace is chosen than a text box in which a value can be entered appears next to the operation type-dropdownbox.


The options add, subtract, multiply, divide or replace are self-explaining. They add, subtract, multiply, divide or replace the timeseries with the specified value over the specified period of time.

The option missing replaces the values in the time series with missing values over the specified period of time, the ignore time series sets the value over the specified period of time to unreliable.

The last option time series is the default option which will be selected after the initial creation of this modifier and this option allows the forecaster to freely edit the timeseries.

An example of the use of the time series modifier is the RRICHNG modifier.

Display

Below a screenshot of the timeseries modifier.

Configuration example

<timeSeriesModifier id="rrichng" name="rrichng">
		<timeSeries>
			<moduleInstanceSetId>SNOW17_Forecast</moduleInstanceSetId>
			<valueType>scalar</valueType>
			<parameterId>RAIM</parameterId>
			<locationSetId>Gages_Catchments</locationSetId>
			<timeSeriesType>simulated forecasting</timeSeriesType>
			<timeStep unit="hour" multiplier="6"/>
		</timeSeries>
		<defaultStartTime>start run</defaultStartTime>
		<defaultEndTime>end run</defaultEndTime>
		<defaultValidTime/>
		<resolveInWorkflow>true</resolveInWorkflow>
		<resolveInPlots>false</resolveInPlots>
		<createContinuousModifiers>true</createContinuousModifiers>
</timeSeriesModifier>


timeSeries

This element can be used to identify to which timeseries this modifier can be applied.

onlyApplyLastModifier

If this option is enabled only the most recent applicable modifier of this type will be applied

mergeUncommittedModifiers

If this option is enabled uncommitted modifiers will be merged into one modifier. This option is limited to modifiers which only modify a single time series

referenceTimeSeries

This option can be used to define a filter for reference time series. The available time series for the selected node in the topology will be filtered by using the defined filter. 

Only the reference time series which belong to the same parameter group as the modifiers which are being editted in the display will be displayed.

In addition only the reference time series which have the same location(s) as the time series which are being modified will be shown. 

defaultValidTime

Forecast time after which the modifier is no longer valid. If omitted, this value will be default to the year 3000 and the valid time entry box will not be shown in the modifier display. Note that the only way to get the validTime option available, is to add: <defaultValidTime/> (without attributes or content)

offsetValidTime

an offset to the default valid time, compared to the T0 of the run

resolveInWorkflow
In the element timeSeries is a filter defined which defines which timeseries can be modified with this timeseries. If the element resolveInWorkflow is set than the modifier can be applied to all timeseries in the current workflow to which the defined time
series filter applies. In an IFD-environment the current workflow is the workflow which is associated to the selected topology node.

resolveInPlots
This element can only be used in IFD-environments. If this element is enabled than the timeseries-filter is also applied to all timseries in the plots associated with the current selected topology node.

editInPlots
It is possible to create a timeseries modifier in the plot displays. This can be done by selecting a timeseries by selecting a legend. After selection the timeseries can be modified by graphically editing the timeseries or by changing values in the graph. This feature can
be disabled by setting this option to false.

createContinousModifiers
If a modifier is created in the graph by default one modifier will be created. However when the option createContinousModifiers is disabled one modifier will be created for every continuous range of modifications made. For example if the forecaster changes a 6 hours timeseries at 00z and at 12z but not a 0600z than by default this will result in creating a single modifier, but when this option is disabled two modifiers will be created. One for each continuous range of changes. In this case there is a change at 00z and one at 12z therefore two modifiers will be created.

Graphical appointment of modifiers (aka GAM)

In order to make use of the graphical appointment of modifiers menu, it is adviced to configure the TimeSeries Display as PlotsTimeSeriesDialog in Explorer.xml:

		<explorerTask name="Data Display">
            ..
			<taskClass>nl.wldelft.fews.gui.plugin.timeseries.PlotsTimeSeriesDialog</taskClass>
            ..
		</explorerTask>


Then, you need to configure several things in the ModifierTypes.xml

Create a modifier type for the parameter you want to modify (as described on this page), e.g.:


<timeSeriesModifier id="timeseries.to.modify" name="GAM.timeseries"> 
	<timeSeries> <moduleInstanceId>My.Module.Instance.Id</moduleInstanceId> 
	<!-- optional --> <parameterId>My.parameter</parameterId> </timeSeries> 
	<defaultStartTime>start run</defaultStartTime> 
	<defaultEndTime>end run</defaultEndTime>
 	<resolveInWorkflow>true</resolveInWorkflow> 
	<resolveInPlots>true</resolveInPlots> 
</timeSeriesModifier>

In the DisplayGroups.xml, you need to define a displayGroup with a display showing a plotId containing the timeseries you just made a modifierType for, e.g.:

<displayGroup name="Graphical Appointment of Modifiers" id="GAM"> 
	<display name="GAM"> <relativeViewPeriod unit="day" start="-3" end="7"/> 
		<locationId>H-MS-SINT</locationId> 
		<plotId>Maas_kansverwachtingen_GAM</plotId> 
</display> </displayGroup>

In the Topology.xml you need to define a node in the topology linked to the displayGroupId of the displayGroup you've just created, e.g.:

<nodes id="GAM"> 
	<node id="GAM_node">
		<displayGroupId>GAM</displayGroupId>
	</node> 
</nodes>

In the TimeSeriesDisplayConfig.xml, there's an optional configuration setting.

If you want to be assisted by default markers when graphically editing the time series, you can configure this behavior, e.g.:

<graphicalEditingConfig> 
	<adjustShapeByDragging> 
	<preSelectTimeStepsPeriodically> 
		<parameterId>My.parameter</parameterId> 
		<timeSpan unit="hour" multiplier="12"/> 
	</preSelectTimeStepsPeriodically> 
	</adjustShapeByDragging> 
</graphicalEditingConfig>



Mark unreliable modifier

This modifier sets all the values in a time series to unreliable over a period so the data will not be used in the models, but the original values will be displayed. The display is very similar to the display used for the timeseries modifier however the dropdownbox is disabled and the option ignore timeseries is enabled. The forecaster can only edit the start and end dates of the period in which the time series will be set to invalid. In the Modifiers Display table the unreliable values in the modified time series are marked yellow.

An example of the use of this modifier is the modifier IGNORETS. This modifier is available in the NWS (National Weather Service) applications. To arrange that the model RESSNGL or the transformation AdjustQ ingores certain types of data.
By setting the correct filter in configuration only certain input time series of ressngl or adjustQ can be ignored by using the modifier.

Display

Below an example of the display of the mark unreliable modifier.

Configuration example

<markUnreliableModifier id="ignorets" name="ignorets">
		<expiryTime unit="day" multiplier="150"/>
		<timeSeries>
			<moduleInstanceId>ImportIHFSDB</moduleInstanceId>
			<valueType>scalar</valueType>
			<parameterId>QIN</parameterId>
			<locationSetId>Gages_AK</locationSetId>
			<timeSeriesType>external historical</timeSeriesType>
			<timeStep unit="hour" multiplier="1"/>
		</timeSeries>
		<defaultStartTime>start run</defaultStartTime>
		<defaultEndTime>end run</defaultEndTime>
</markUnreliableModifier>


timeSeries
This element can be used to identify which timeseries this modifier can be applied.

defaultstarttime

The default start time of the modifier can be defined here. It corresponds to the same fields in the modifier display. This is only a default value, which can be changed by the user.

Possible options are: "start run: or "time zero"

defaultendtime

The default end time of the modifier can be defined here. It corresponds to the same fields in the modifier display. This is only a default value, which can be changed by the user.

Possible options are: "time zero" or "end run"

Compound modifier

The compound modifier can be used to modify a set of time series with slider bars. Each slider shows a reference value in blue. If no modification is made the value of the slider will be equal to the reference value. If a modification is made the slider will always be equal to the value of the modifier. Too indicate that a modification was made the text box will be made yellow.

An example of the use of the compound modifier is the sacco-modifier. This modifier is used to modify the state of the Sacramento-model. Each slider represents a state parameter. In blue the current value is shown, the slider is equal to current value of the model or if the state parameter is changed it will be equal to the modification.

Display

Below an example of the display of this modifier.

Schema

Configuration example


<compoundModifier id="sacco" name="sacco">
		<slider>
			<currentTimeSeries>
				<moduleInstanceSetId>SACSMA_Forecast</moduleInstanceSetId>
				<valueType>scalar</valueType>
				<parameterId>UZTWC</parameterId>
				<locationSetId>Gages_Catchments</locationSetId>
				<timeSeriesType>simulated forecasting</timeSeriesType>
				<timeStep unit="hour" multiplier="6"/>
			</currentTimeSeries>
			<modifiedTimeSeries>
				<moduleInstanceId>ExportMODS</moduleInstanceId>
				<valueType>scalar</valueType>
				<parameterId>UZTWC</parameterId>
				<locationSetId>Gages_Catchments</locationSetId>
				<timeSeriesType>external historical</timeSeriesType>
				<timeStep unit="nonequidistant"/>
			</modifiedTimeSeries>
			<hardLimits>
				<maximumValue>10</maximumValue>
				<minimumValue>0</minimumValue>
			</hardLimits>
		</slider>
		<slider>
			<currentTimeSeries>
				<moduleInstanceSetId>SACSMA_Forecast</moduleInstanceSetId>
				<valueType>scalar</valueType>
				<parameterId>UZFWC</parameterId>
				<locationSetId>Gages_Catchments</locationSetId>
				<timeSeriesType>simulated forecasting</timeSeriesType>
				<timeStep unit="hour" multiplier="6"/>
			</currentTimeSeries>
			<modifiedTimeSeries>
				<moduleInstanceId>ExportMODS</moduleInstanceId>
				<valueType>scalar</valueType>
				<parameterId>UZFWC</parameterId>
				<locationSetId>Gages_Catchments</locationSetId>
				<timeSeriesType>external historical</timeSeriesType>
				<timeStep unit="nonequidistant"/>
			</modifiedTimeSeries>
			<maximumAllowedValueParameterId>UZFWM</maximumAllowedValueParameterId>
		</slider>
		<slider>
			<currentTimeSeries>
				<moduleInstanceSetId>SACSMA_Forecast</moduleInstanceSetId>
				<valueType>scalar</valueType>
				<parameterId>LZTWC</parameterId>
				<locationSetId>Gages_Catchments</locationSetId>
				<timeSeriesType>simulated forecasting</timeSeriesType>
				<timeStep unit="hour" multiplier="6"/>
			</currentTimeSeries>
			<modifiedTimeSeries>
				<moduleInstanceId>ExportMODS</moduleInstanceId>
				<valueType>scalar</valueType>
				<parameterId>LZTWC</parameterId>
				<locationSetId>Gages_Catchments</locationSetId>
				<timeSeriesType>external historical</timeSeriesType>
				<timeStep unit="nonequidistant"/>
			</modifiedTimeSeries>
			<maximumAllowedValueParameterId>LZTWM</maximumAllowedValueParameterId>
		</slider>
		<slider>
			<currentTimeSeries>
				<moduleInstanceSetId>SACSMA_Forecast</moduleInstanceSetId>
				<valueType>scalar</valueType>
				<parameterId>LZFSC</parameterId>
				<locationSetId>Gages_Catchments</locationSetId>
				<timeSeriesType>simulated forecasting</timeSeriesType>
				<timeStep unit="hour" multiplier="6"/>
			</currentTimeSeries>
			<modifiedTimeSeries>
				<moduleInstanceId>ExportMODS</moduleInstanceId>
				<valueType>scalar</valueType>
				<parameterId>LZFSC</parameterId>
				<locationSetId>Gages_Catchments</locationSetId>
				<timeSeriesType>external historical</timeSeriesType>
				<timeStep unit="nonequidistant"/>
			</modifiedTimeSeries>
			<maximumAllowedValueParameterId>LZFSM</maximumAllowedValueParameterId>
		</slider>
		<slider>
			<currentTimeSeries>
				<moduleInstanceSetId>SACSMA_Forecast</moduleInstanceSetId>
				<valueType>scalar</valueType>
				<parameterId>LZFPC</parameterId>
				<locationSetId>Gages_Catchments</locationSetId>
				<timeSeriesType>simulated forecasting</timeSeriesType>
				<timeStep unit="hour" multiplier="6"/>
			</currentTimeSeries>
			<modifiedTimeSeries>
				<moduleInstanceId>ExportMODS</moduleInstanceId>
				<valueType>scalar</valueType>
				<parameterId>LZFPC</parameterId>
				<locationSetId>Gages_Catchments</locationSetId>
				<timeSeriesType>external historical</timeSeriesType>
				<timeStep unit="nonequidistant"/>
			</modifiedTimeSeries>
			<maximumAllowedValueParameterId>LZFPM</maximumAllowedValueParameterId>
		</slider>
		<slider>
			<currentTimeSeries>
				<moduleInstanceId>ExportMODS</moduleInstanceId>
				<valueType>scalar</valueType>
				<parameterId>ADIMC</parameterId>
				<locationSetId>Gages_Catchments</locationSetId>
				<timeSeriesType>external historical</timeSeriesType>
				<timeStep unit="nonequidistant"/>
			</currentTimeSeries>
			<modifiedTimeSeries>
				<moduleInstanceSetId>SACSMA_Forecast</moduleInstanceSetId>
				<valueType>scalar</valueType>
				<parameterId>ADIMC</parameterId>
				<locationSetId>Gages_Catchments</locationSetId>
				<timeSeriesType>simulated forecasting</timeSeriesType>
				<timeStep unit="hour" multiplier="6"/>
			</modifiedTimeSeries>
			<maximumAllowedValueParameterId>UZTWM+LZTWM</maximumAllowedValueParameterId>
		</slider>
		<defaultTime>start run</defaultTime>
		<offsetDefaultTime unit="day" multiplier="1"/>
	</compoundModifier>


slider
For each slider the time series which holds the reference values should be configured, and the time series which should contain the modified value should be configured. Each slider also has maximum value. This maximum is retrieved from the module parameter file of the model. The element maximumAllowedValueParameterId identifies which parameter should be used to identify the maximum. Note that the parameters of the current time series and of the modified time series must be the same. 

current time series
This time series holds the current value of the model and will be used to determine the value of the blue reference value.

modified time series
If a parameter is changed the modifier will be applied to this time series

maximumAllowedParameterId
The maximum of the slider can be derived from the module parameter file by identifying the parameterId which holds the value of the maximum

hardLimits
It also possible to define the minimum and maximum of the modifications by hard coding them in the configuration.

defaultTime
Default of modifier date. Possible options are "start run" and "time zero".

Missing value modifier

The missing value modifier can be used to set the values in a time series to missing over a period of time. The user can only define the period of time over which this modifier is active.

The panel which is used for this modifier is very similar to the panel of the time series modifier. The difference with the time series modifier panel is that the dropdown box which is used to select an operation type is disabled and set to the type Missing.

An example of the use of this modifier is the SETMSNG-modifier which is applied in NWS (National Weather Service) applications. To set the value of certain time series to missing this modifier is used.

Display

An example of the missing value modifier is shown below.


Configuration example


<missingValueModifier id="setmsng" name="setmsng">
		<timeSeries>
			<moduleInstanceId>ImportIHFSDB</moduleInstanceId>
			<valueType>scalar</valueType>
			<parameterId>STG</parameterId>
			<locationSetId>Gages_AK</locationSetId>
			<timeSeriesType>external historical</timeSeriesType>
			<timeStep unit="hour" multiplier="6"/>
		</timeSeries>
		<timeSeries>
			<moduleInstanceId>ImportIHFSDB</moduleInstanceId>
			<valueType>scalar</valueType>
			<parameterId>STG</parameterId>
			<locationSetId>Gages_AK</locationSetId>
			<timeSeriesType>external historical</timeSeriesType>
			<timeStep unit="hour" multiplier="1"/>
		</timeSeries>
		<defaultStartTime>start run</defaultStartTime>
		<defaultEndTime>end run</defaultEndTime>
		<resolveInWorkflow>false</resolveInWorkflow>
		<resolveInPlots>true</resolveInPlots>
</missingValueModifier>


timeseries

This element can be used to identify to which timeseries this modifier should be applied.

defaultStartTime
The default start time of the modifier. The available options are startrun and time zero. It corresponds to the same fields in the modifier display. This is only a default value, which can be changed by the user.

offsetDefaultStartTime
The offset start time compared to the option defined in defaultStartTime. For example when an offset of 1 day is configured in this option and the defaultStartTime is set to time zero than the default start time of the modifier will be set to
time zero plus 1 day. It corresponds to the same fields in the modifier display. This is only a default value, which can be changed by the user.

defaultEndTime
The default end time of the modifier. The available options are time zero and end run. It corresponds to the same fields in the modifier display. This is only a default value, which can be changed by the user.

offsetDefaultEndTime
The offset of the end time compared to the option defined in defaultEndTime. It corresponds to the same fields in the modifier display. This is only a default value, which can be changed by the user.

expiryTime
This element can be used to overrule the default expiry time. The expiryTime is not related to the display (and is thus hidden from the user) and can be used to maximize the period a rating table modifier can be applied. This expiryTime is related to the period to which the modifier is applied, it does not indicate the period after which the rating table will be removed by the rollingBarrel. By using this option, you can overrule the default expiryTime.

resolveInWorkflow
In the element timeSeries is a filter defined which defines which timeseries can be modified with this timeseries. If the element resolveInWorkflow is set than the modifier can be applied to all timeseries in the current workflow to which the defined time series filter applies. In an IFD-environment the current workflow is the workflow which is associated to the selected topology node.

resolveInPlots
This element can only be used in IFD-environments. If this element is enabled than the timeseries-filter is also applied to all timeseries in the plots associated with the current selected topology node.

Switch option modifier

This modifier allows the forecaster to choose one of the configured time series. If the chosen time series was defined as a timeValue-timeseries than the forecaster will also have the option to enter a value. If the timeseries was defined as a boolean time series than the forecaster cannot enter a value and the textbox for the value will be grayed out.

An example of the use of this modifier is the SSARREG-modifier of the NWS. This modifier is used to set the regulation options for a basin. By using the radio-button a regulation option can be selected. For most regulation options a value can be entered. However the option FREEFLOW can only be switched on.

Below an example of the display of a switch option modifier just after it is created by using the "create mod"-button.

In the example above only 1 regulation option is shown. It is possible to add a new one clicking on the Add-button.

It is only possible to create regulation options at the time step of this modifier.

The delete button can be used to delete an entry. For most regulation option a value can be entered in the value-box. The freeflow option can only be selected. It is not possible to enter a value.

Below a configuration example.

<switchOptionModifier id="ssarreg" name="SSARREG">
		<expiryTime unit="day" multiplier="365"/>
		<timeValueTimeSeries>
			<moduleInstanceId>ExportMODS</moduleInstanceId>
			<valueType>scalar</valueType>
			<parameterId>SETQ</parameterId>
			<qualifierId>US</qualifierId>
			<locationSetId>Reservoirs</locationSetId>
			<timeSeriesType>simulated forecasting</timeSeriesType>
			<timeStep unit="nonequidistant"/>
			<!--                    <ensembleId>main</ensembleId>   -->
		</timeValueTimeSeries>
		<timeValueTimeSeries>
			<moduleInstanceId>ExportMODS</moduleInstanceId>
			<valueType>scalar</valueType>
			<parameterId>SETH</parameterId>
			<qualifierId>US</qualifierId>
			<locationSetId>Reservoirs</locationSetId>
			<timeSeriesType>external forecasting</timeSeriesType>
			<timeStep unit="nonequidistant"/>
		</timeValueTimeSeries>
		<timeValueTimeSeries>
			<moduleInstanceId>ExportMODS</moduleInstanceId>
			<valueType>scalar</valueType>
			<parameterId>SETS</parameterId>
			<qualifierId>US</qualifierId>
			<locationSetId>Reservoirs</locationSetId>
			<timeSeriesType>external forecasting</timeSeriesType>
			<timeStep unit="nonequidistant"/>
		</timeValueTimeSeries>
		<timeValueTimeSeries>
			<moduleInstanceId>ExportMODS</moduleInstanceId>
			<valueType>scalar</valueType>
			<parameterId>SETDQ</parameterId>
			<qualifierId>US</qualifierId>
			<locationSetId>Reservoirs</locationSetId>
			<timeSeriesType>external forecasting</timeSeriesType>
			<timeStep unit="nonequidistant"/>
		</timeValueTimeSeries>
		<timeValueTimeSeries>
			<moduleInstanceId>ExportMODS</moduleInstanceId>
			<valueType>scalar</valueType>
			<parameterId>SETDH</parameterId>
			<qualifierId>US</qualifierId>
			<locationSetId>Reservoirs</locationSetId>
			<timeSeriesType>external forecasting</timeSeriesType>
			<timeStep unit="nonequidistant"/>
		</timeValueTimeSeries>
		<timeValueTimeSeries>
			<moduleInstanceId>ExportMODS</moduleInstanceId>
			<valueType>scalar</valueType>
			<parameterId>SETDS</parameterId>
			<qualifierId>US</qualifierId>
			<locationSetId>Reservoirs</locationSetId>
			<timeSeriesType>external forecasting</timeSeriesType>
			<timeStep unit="nonequidistant"/>
		</timeValueTimeSeries>
		<booleanTimeSeries>
			<moduleInstanceId>ExportMODS</moduleInstanceId>
			<valueType>scalar</valueType>
			<parameterId>FREEFLOW</parameterId>
			<qualifierId>US</qualifierId>
			<locationSetId>Reservoirs</locationSetId>
			<timeSeriesType>external forecasting</timeSeriesType>
			<timeStep unit="nonequidistant"/>
		</booleanTimeSeries>
		<timeValueTimeSeries>
			<moduleInstanceId>ExportMODS</moduleInstanceId>
			<valueType>scalar</valueType>
			<parameterId>SETQ</parameterId>
			<qualifierId>DS</qualifierId>
			<locationSetId>Reservoirs</locationSetId>
			<timeSeriesType>external forecasting</timeSeriesType>
			<timeStep unit="nonequidistant"/>
		</timeValueTimeSeries>
		<timeValueTimeSeries>
			<moduleInstanceId>ExportMODS</moduleInstanceId>
			<valueType>scalar</valueType>
			<parameterId>SETH</parameterId>
			<qualifierId>DS</qualifierId>
			<locationSetId>Reservoirs</locationSetId>
			<timeSeriesType>external forecasting</timeSeriesType>
			<timeStep unit="nonequidistant"/>
		</timeValueTimeSeries>
		<timeValueTimeSeries>
			<moduleInstanceId>ExportMODS</moduleInstanceId>
			<valueType>scalar</valueType>
			<parameterId>SETS</parameterId>
			<qualifierId>DS</qualifierId>
			<locationSetId>Reservoirs</locationSetId>
			<timeSeriesType>external forecasting</timeSeriesType>
			<timeStep unit="nonequidistant"/>
		</timeValueTimeSeries>
		<timeValueTimeSeries>
			<moduleInstanceId>ExportMODS</moduleInstanceId>
			<valueType>scalar</valueType>
			<parameterId>SETDQ</parameterId>
			<qualifierId>DS</qualifierId>
			<locationSetId>Reservoirs</locationSetId>
			<timeSeriesType>external forecasting</timeSeriesType>
			<timeStep unit="nonequidistant"/>
		</timeValueTimeSeries>
		<timeValueTimeSeries>
			<moduleInstanceId>ExportMODS</moduleInstanceId>
			<valueType>scalar</valueType>
			<parameterId>SETDH</parameterId>
			<qualifierId>DS</qualifierId>
			<locationSetId>Reservoirs</locationSetId>
			<timeSeriesType>external forecasting</timeSeriesType>
			<timeStep unit="nonequidistant"/>
		</timeValueTimeSeries>
		<timeValueTimeSeries>
			<moduleInstanceId>ExportMODS</moduleInstanceId>
			<valueType>scalar</valueType>
			<parameterId>SETDS</parameterId>
			<qualifierId>DS</qualifierId>
			<locationSetId>Reservoirs</locationSetId>
			<timeSeriesType>external forecasting</timeSeriesType>
			<timeStep unit="nonequidistant"/>
		</timeValueTimeSeries>
		<booleanTimeSeries>
			<moduleInstanceId>ExportMODS</moduleInstanceId>
			<valueType>scalar</valueType>
			<parameterId>FREEFLOW</parameterId>
			<qualifierId>DS</qualifierId>
			<locationSetId>Reservoirs</locationSetId>
			<timeSeriesType>external forecasting</timeSeriesType>
			<timeStep unit="nonequidistant"/>
		</booleanTimeSeries>
		<startTime>time zero</startTime>
</switchOptionModifier>

The timeValueTimeSeries and the booleanTimeSeries define which options are available in the radio button. A timeValueTimeSeries will define an option for which a value can be entered. A booleanTimeSeries will define an option which can only be selected. The startTime defines the initial time of the modifier after creation. The available values are "time zero" and "start run".

Option modifiers

This modifier is very similar to the switch option modifier. However this modifier doesn't allow to define an option per date. It only allows to define one option which will be always valid after creation of the modifier. Note that this modifier is obsolete and should not be used anymore. This modifier is replaced by the generic location attribute modifier by which the same functionality can be created. An example of the use of this modifier is the rainfall_switch of the seqwater-system. This option allows the forecaster to choose a forecast type (user defined forecast, no rainfall forecast or use the rainfall forecast). Secondly it is also possible to choose which rainfall observations to use the forecast.

Display

Below an example of a option modifier. In this case the example shows the rainfall switch-modifier.

Schema

<optionModifier id="Rainfall_Switch" name="Rainfall Switch"> 
<booleanTimeSeries> 
	<parameterId>Grid</parameterId> 
	<qualifierId>observed</qualifierId> 
</booleanTimeSeries> 
<booleanTimeSeries> 
	<parameterId>Stations</parameterId> 
	<qualifierId>observed</qualifierId> 
</booleanTimeSeries> 
<booleanTimeSeries> 
	<parameterId>SeqGrid</parameterId> 
	<qualifierId>observed</qualifierId> 
	</booleanTimeSeries> 
<booleanTimeSeries> 
	<parameterId>SeqStations</parameterId> 
	<qualifierId>observed</qualifierId> 
</booleanTimeSeries> 
<booleanTimeSeries> 
	<parameterId>Forecast ON</parameterId> 
	<qualifierId>forecast</qualifierId> 
</booleanTimeSeries> 
<booleanTimeSeries> 
	<parameterId>Forecast OFF</parameterId> 
	<qualifierId>forecast</qualifierId> 
</booleanTimeSeries> 
<booleanTimeSeries> 
	<parameterId>User ON</parameterId>
	 <qualifierId>forecast</qualifierId> 
</booleanTimeSeries> 
<expiryTime unit="day" multiplier="1000"/> 
</optionModifier>


timeValueTimeSeries

First the timeValueTimeSeries are defined. The parameterid of the defined timeseries will be used as an identifier
in radiobutton which can be used to select an option. When an option is selected which is defined as a timeValue-timeseries
than the user can also define a value.

booleanTimeSeries

This option allows the user to define option-types which can only be selected by used, but doesn't offer the possibility to
enter a additional value.

expiryTime

This option can be used to define an expiry time for this modifier which overrules the default expiry time. The expiryTime is not related to the modifier display (and is thus hidden from the user) and can be used to maximize the period a rating table modifier can be applied. This expiryTime is related to the period to which the modifier is applied, it does not indicate the period after which the rating table will be removed by the rollingBarrel. By using this option, you can overrule the default expiryTime.


Spatial Copy Modifier

Since 2019.02. The spatial copy modifier is used to modify a grid time series. It is a spatial modifier which needs to be created through the spatial display instead of the modifiers panel. The time series is modified by copying part of a different grid time series. The forecaster defines the area and period where they wish to apply the modifier. They select a different grid time series of which they wish to use and copy and paste this time series. In the selected area and at the selected time steps, the values of the modified time series will be changed to the values of the copied time series. 

Display

The spatial copy modifier can only be created through the spatial display.

More information on how this is done is found at User Guide > 05 Spatial Display > Creating Spatial Modifiers.

Only the properties of a spatial copy modifier can be edited through the modifiers panel.

Configuration


Example config of a spatial copy modifier
	<spatialCopyModifier id="SpatialCopy" name="Spatial Copy">
		<timeSeries>
			<moduleInstanceId>Import_NWP_Mediumrange</moduleInstanceId>
			<qualifierId>BE</qualifierId>
		</timeSeries>
		<timeSeries>
			<moduleInstanceId>Import_NWP_Mediumrange</moduleInstanceId>
			<qualifierId>RWC</qualifierId>
		</timeSeries>
	</spatialCopyModifier>

The regular modifier type configuration elements such as <expiryTime> and <userDefinedDescription> field are available. The configuration elements specific for this modifier are explained below.

timeSeries

The <timeSeries> elements are time series filters used to configure to which time series the spatial copy modifier can be applied. In the given example, any time series with module instance id "Import_NWP_Mediumrange" and qualifier id "BE" or "RWC" can be modified with a spatial copy modifier. If such a time series is shown in the spatial display, the spatial modifier mode button and the copy paste buttons used to create spatial copy modifiers will be available. The configured time series should always be a grid time series. Configuring a spatial copy modifier for a time series with a different type will have no effect.

Spatial Profile Modifier

Since 2019.02. The spatial profile modifier is used to modify a grid time series. It is a spatial modifier which needs to be created through the spatial display instead of the modifiers panel. The time series is modified by replacing all values in an area of grid cells with the values of a scalar time series called the "spatial profile". The forecaster defines an area and period over which the modifier should be applied. They then specify the scalar time series values used to replace the grid cell values.

Display

The spatial profile modifier can only be created through the spatial display.

More information on how this is done is found at User Guide > 05 Spatial Display > Creating Spatial Modifiers.

Once created, the properties and scalar "spatial profile" time series can be edited through the modifiers panel.

Optionally, you can configure descriptive statistical functions for each spatial profile modifier type. This will result in a statistics panel being included in the spatial profile modifier editor which shows these statistics:

Configuration


Example config of a spatial profile modifier
	<spatialProfileModifier id="SpatialProfile" name="Spatial Profile">
		<expiryTime unit="day" multiplier="2"/>
		<userDefinedDescriptionField id="Comment" descriptionField="Comment"/>
		<timeSeries>
			<moduleInstanceId>Import_NWP_Mediumrange</moduleInstanceId>
			<qualifierId>BE</qualifierId>
		</timeSeries>
		<timeSeries>
			<moduleInstanceId>Import_NWP_Mediumrange</moduleInstanceId>
			<qualifierId>RWC</qualifierId>
		</timeSeries>
		<descriptiveFunctionGroups>
			<descriptiveFunctionGroup name="Basic statistics">
				<descriptiveFunction function="startTime" ignoreMissings="true"/>
				<descriptiveFunction function="endTime" ignoreMissings="true"/>
				<descriptiveFunction function="timeLength" ignoreMissings="true"/>
			</descriptiveFunctionGroup>
			<descriptiveFunctionGroup name="Accumulation">
				<descriptiveFunction function="movingAccumulationMax" ignoreMissings="true">
					<timeSpan unit="hour" multiplier="1"/>
					<timeSpan unit="hour" multiplier="2"/>
					<timeSpan unit="hour" multiplier="3"/>
					<timeSpan unit="hour" multiplier="4"/>
					<timeSpan unit="hour" multiplier="6"/>
					<timeSpan unit="hour" multiplier="12"/>
					<timeSpan unit="hour" multiplier="24"/>
					<timeSpan unit="hour" multiplier="48"/>
					<timeSpan unit="hour" multiplier="72"/>
					<timeSpan unit="hour" multiplier="96"/>
					<timeSpan unit="hour" multiplier="120"/>
				</descriptiveFunction>
				<descriptiveFunction function="sum" ignoreMissings="true"/>
			</descriptiveFunctionGroup>
		</descriptiveFunctionGroups>
	</spatialProfileModifier>

The regular modifier type configuration elements such as <expiryTime> and <userDefinedDescription> field are available. The configuration elements specific for this modifier are explained below.

timeSeries

The <timeSeries> elements are time series filters used to configure to which time series the spatial profile modifier can be applied. In the given example, any time series with module instance id "Import_NWP_Mediumrange" and qualifier id "BE" or "RWC" can be modified with a spatial profile modifier. If such a time series is shown in the spatial display, the spatial modifier mode button and the spatial profile button used to create spatial profile modifiers will be available. The configured time series should always be a grid time series. Configuring a spatial copy modifier for a time series with a different type will have no effect.

descriptiveFunctionGroups

This is an optional element to configure the statistics shown in the statistics panel. When this element is not configured, the statistics panel (and button) will be hidden in the spatial profile modifier editor. More information on the available descriptiveFunctions can be found in Configuration Guide > System Configuration > Time Series Display Configuration.

"Apply to"  option

Via "Apply To" button it is possible to apply a single modifier to an entire set of IFD-segments . In case of time series modifiers  and  reverseOrderModifiers an option  “create unique modifiers for each segment” can also be used.

This option is only available when creating a new modifier  and makes possible to create a modifier as an unique independent modifier for each of the selected segments.  The  option is useful  when many segments  need the same type of modifier but the  forecaster needs to make adjustments to a subset of the initial group modifier.

Copy time series modifiers

It is possible to copy time series modifiers to another set of modifiers with a different set of module instance descriptors.

This option is available after selecting one or more time series modifiers in the modifiers panels in the menu which appears after a right mouse click.

This option is by default not available. To enable this feature the copyModifiers section needs to configured.

An example is given below.

<copyModifiers>
		<timeSeriesModifiersPattern>
			<pattern>MAP</pattern>
			<patternDescription>MAP</patternDescription>
		</timeSeriesModifiersPattern>
		<timeSeriesModifiersPattern>
			<pattern>_HTMS</pattern>
			<patternDescription>1D</patternDescription>
		</timeSeriesModifiersPattern>
		<timeSeriesModifiersPattern>
			<pattern>_Delft3D_UpdateStates</pattern>
			<patternDescription>D3D Update States</patternDescription>
		</timeSeriesModifiersPattern>
		<timeSeriesModifiersPattern>
			<pattern>_Delft3D_0</pattern>
			<patternDescription>D3D Scenario 0</patternDescription>
		</timeSeriesModifiersPattern>
		<timeSeriesModifiersPattern>
			<pattern>_Delft3D_1</pattern>
			<patternDescription>D3D Scenario 1</patternDescription>
		</timeSeriesModifiersPattern>
</copyModifiers>

The configured pattern is the pattern which is actually used when copying modifiers. The pattern description is a pretty name which only used for display purposes in the "Copy modifiers dialog"

After selecting one or more time series modifiers which comply to one of the patterns defined in the copyModifiers section the option "Copy the selected time series modifiers to another module instance id" will appear in the menu.

After selecting the option a panel (see below) in which the user can select a pattern will appear.

The user can select a new pattern (only one) from the list. After pressing the OK button the selected time series modifiers will be copied to a new module instance id.

The new module instance id will be determined by replacing the pattern from the existing module instance id with the new selected pattern.

For example if the original module instance id is original_MAP and we have configured two patterns original and copy and we select the pattern copy from the list the new module instance id will be copy_MAP.

All the other characteristics of the time series modifiers will be kept the same. The new copied modifier will only differ in module instance id.





  • No labels