Quintiq file version 2.0
|
#parent: #root
|
Method GetSeverity (Real valueofissue, Boolean isupperthresholdviolation, const constcontent LibOpt_StatisticSeverityScaleEntrys severityscaleentries) as Real
|
{
|
Description: 'Return the `Severity` to set for a `LibOpt_Issue` with the given <value of issue> and nature (<whether it is an upper-threshold violation>).'
|
TextBody:
|
[*
|
// Verify that we have a valid *severity scale*.
|
verify( severityscaleentries.Size() > 0,
|
"`LibOpt_Statistic` with type", this.DefinitionName(),
|
"has an undefined *severity scale for",
|
ifexpr( isupperthresholdviolation, "upper", "lower" ) + "-threshold violation*."
|
);
|
|
thresholds := construct( Reals );
|
severities := construct( Reals );
|
traverse( severityscaleentries, Elements, entry )
|
{
|
thresholds.Add( entry.Threshold() );
|
severities.Add( entry.Severity() );
|
}
|
|
threshold_range_left := thresholds.Element( 0 );
|
threshold_range_right := thresholds.Element( thresholds.Size() - 1 );
|
|
severity_range_left := severities.Element( 0 );
|
severity_range_right := severities.Element( severities.Size() - 1 );
|
severity := ifexpr( isupperthresholdviolation, severity_range_right, severity_range_left );
|
|
if( ifexpr( isupperthresholdviolation,
|
valueofissue < threshold_range_right,
|
valueofissue > threshold_range_left
|
)
|
)
|
{
|
severity_found := false;
|
|
for( index := 0;
|
not severity_found
|
and index < thresholds.Size();
|
index++
|
)
|
{
|
threshold_range_left := thresholds.Element( index );
|
threshold_range_right := guard( thresholds.Element( index + 1 ), threshold_range_right );
|
|
severity_found := valueofissue < threshold_range_right;
|
|
if( severity_found )
|
{
|
severity_range_left := severities.Element( index );
|
severity_range_right := guard( severities.Element( index + 1 ), severity_range_right );
|
}
|
}
|
|
if( threshold_range_right > threshold_range_left )
|
{
|
severity := severity_range_left
|
+ ( severity_range_right - severity_range_left ) * ( valueofissue - threshold_range_left ) / ( threshold_range_right - threshold_range_left );
|
}
|
}
|
|
return severity;
|
*]
|
InterfaceProperties { Accessibility: 'Module' }
|
}
|