{# INPUTS: "contextBundle" is a ContextBundle, "resultsBundle" is a ResultsBundle #}
--- Optimal cut sets report ---
Network name: {{contextBundle.getNetworkName()}}

Node names from column: {{contextBundle.getNodeNameColumnName()}}


{% if contextBundle.getSourceNodes() is not null %}
Source nodes:
{{contextBundle.getNodeNames(contextBundle.getSourceNodes()) | join(', ')}}
{% else  %}
No source nodes selected.
{% endif %}


{% if contextBundle.getTargetNodes() is not null %}
Target nodes:
{{contextBundle.getNodeNames(contextBundle.getTargetNodes()) | join(', ')}}
{% else %}
No target nodes selected.
{% endif %}


{% if contextBundle.getOffTargetNodes() is not null %}
Off-target nodes:
{{contextBundle.getNodeNames(contextBundle.getOffTargetNodes()) | join(', ')}}
{% else %}
No off-target nodes selected.
{% endif %}


Path-finding algorithm: {{contextBundle.getPathFindingAlgorithm().description()}}

Found {{resultsBundle.getPathsToTargets.size()}} elementary paths.

Search times: {{resultsBundle.getPathsToTargetsExecutionSeconds()}}s. for targets, {{resultsBundle.getPathsToOffTargetsExecutionSeconds()}}s. for off-targets.

{% if resultsBundle.getPathsToTargets() is not empty %}
Paths to target nodes:
{% for path in resultsBundle.getPathsToTargets() %}
{{contextBundle.pathString(path)}}

{% endfor %}
{% else %}
No paths to target nodes found.
{% endif %}

{% if resultsBundle.getPathsToOffTargets() is not empty %}
Paths to off-target nodes:
{% for path in resultsBundle.getPathsToOffTargets() %}
{{contextBundle.pathString(path)}}

{% endfor %}
{% else %}
No paths to off-target nodes found.
{% endif %}

Scoring algorithm: {{contextBundle.getOCSANAAlgorithm().description()}}

Computed OCSANA scores in {{resultsBundle.getOCSANAScoringExecutionSeconds()}}s.


{% if not resultsBundle.mhsFindingWasCanceled() %}
MHS algorithm: {{contextBundle.getMHSAlgorithm().description()}}

Found {{resultsBundle.getCIs().size()}} CIs in {{resultsBundle.getMHSExecutionSeconds()}}s.

Scoring data for all CIs:
Cut set	Size	OCSANA score	Target-Score side-effectscore
{% for ci in resultsBundle.getCIs() %}
{{ci.interventionNodesString()}}	{{ci.size()}}	{{resultsBundle.getOCSANAScores().OCSANA(ci.getNodes())}} {{resultsBundle.getOCSANAScores().EFFECT_ON_TARGETS(ci.getNodes())}}	{{resultsBundle.getOCSANAScores().SIDE_EFFECTS(ci.getNodes())}}

{% endfor %}
{% else %}
CI generation canceled.
{% endif %}
