Scenario Scripts (.scn)
A SELES scenario script executes a sequence of commands — in the order specified — to perform tasks such as loading spatial data, opening models, and running simulations.
2.1 General Syntax Rules
- Every command must be on a separate line (separated by a carriage return).
- The last command must also be followed by a carriage return (i.e. the last line of the file is blank).
- All
KEYWORDs are shown in upper case and must be spelled exactly as shown (the language is not case sensitive). <Labels>in angle brackets indicate values that the modeller must substitute.- Values preceded by
#must be integers; values preceded by#.#may be any floating-point value. - Values preceded by
%are logical values (true or false). - Values in double quotes (
"…") are text strings or filenames. - All other values are identifiers (e.g. variable names, file names).
- White space (extra spaces, tabs, carriage returns) is ignored.
- Comments:
/* … */for block comments;//for line-end comments. - File names and folder paths may optionally be enclosed in double quotes. Use quotes if the path contains spaces or unusual characters. Examples:
..\outputs\scn1"..\my outputs\example scn1"
- Logical values:
0,OFF, orFALSE= false;1,ON, orTRUE= true.
2.2 Scenario Commands
A scenario file must begin with either of the following (the latter is preferred):
Scenario Information
Seles Scenario
The following commands may then appear in any order and number, and are processed in the order encountered.
Load GIS Rasters
<FileName>
<ViewName> = <FileName>
Opens a raster file into a view. If a view name is omitted, the view takes the name of the raster file (without suffix). Examples:
Elev100.tif
Elevation = Elev100.tif
Supported formats: GeoTiff (preferred), GRASS, ARC GRID ASCII, ERDAS. If the raster format is real-valued, a real-value view is created; otherwise an integer-value view is created.
Scale on load: append * <expression> to multiply each cell value by a factor when loading — useful to scale real-value rasters into fixed-point integer views:
SiteIndex10 = SiteIndex.tif * 10
Save Raster Views
SAVE <ViewName> <FileName> <Type>
Saves the named raster view to a file. <Type> must be one of: GeoTiff, GRASS, GRASS COMPRESSED, GRASS ASCII, ARC ASCII, ERDAS8, or ERDAS16. Example:
Save StandAge grids\StandAge_year400.tif GeoTiff
Open Dynamic Model Files
<FileName.sel>
Loads a dynamic model (.sel) file, defining the spatio-temporal state space. Example:
ForestEstateLM.sel
Before loading a dynamic model, all required inputs must already be loaded:
- Raster views used as spatial variables and constants.
- Script variables used for input file paths, file names, initial parameter settings, etc.
Only one dynamic model is active at a time — loading a new one supersedes the previous one.
Set Spatial Dimensions
Model Dimensions: <ViewName>
Sets the scenario dimensions (rows and columns) to match a loaded raster view. Must be specified before loading the dynamic model file. Example:
Model Dimensions: StudyArea
ForestEstateLM.sel
Any input raster that does not match the dynamic model dimensions will be sub- or super-sampled, with a warning. In general, matching georeferencing should be done before loading a scenario.
Simulation Control
SimStart #RunLength
SimStart #RunLength #Runs
<LandscapeEventFileName> %UseEvent
All simulation control commands must follow loading of a dynamic model file.
SimStart #RunLength— Runs a single simulation for the specified number of time units.SimStart #RunLength #Runs— Runs#RunsMonte Carlo replicates, each for#RunLengthtime units. Example:Simulations start at time 0. Events are processed up to (but not including)SimStart 400SimStart 400 100#RunLength.<LandscapeEvent.lse> %UseEvent— Activates or deactivates a landscape event loaded in the current dynamic model. Useful for testing. Example:Logging.lse OFF
Expressions
Expressions assign values to global variables or script variables and can be used in conditions. They evaluate to a numeric or logical value.
#Value
<GlobalConstant>
<GlobalVariable>
(Expression)
Arithmetic operators:
| Operator | Meaning |
|---|---|
+ - * / | Standard arithmetic |
^ | Exponentiation |
% | Modulo (remainder) |
| Expression | | Absolute value |
ROUND(Expression) | Round to nearest integer |
CEIL(Expression) | Round up |
FLOOR(Expression) | Round down |
Logical operators:
| Operator | Meaning |
|---|---|
AND | Logical conjunction |
OR | Logical disjunction |
NOT | Logical negation |
EQ or == | Equality |
NEQ or != | Inequality |
< <= > >= | Comparisons |
<< >> | Bit-shift left / right |
Normal precedence rules apply. Use parentheses to make complex expressions unambiguous, especially when mixing types (e.g. x + y > z).
Setting Global Variables
<Variable> = Expression
<Variable> = Expression, Expression, …
<Variable> = [Expression, Expression, …]
Changes the initial value of a global variable after loading the dynamic model (the variable must be defined in the .sel file first). The second and third forms are for one-dimensional array variables.
If a global variable is used as a logical value, use OR/AND rather than +/*. For example, if x and y are both TRUE (value 1), then x + y evaluates to 2, while x OR y evaluates to TRUE.
Script Variables (String Variables)
$Label$ = <Value>
Creates and/or sets a script variable named Label. Dollar signs ($) delimit the variable name. The value can be text or a numeric/logical expression.
Script variables can be placed wherever a numeric or text value is required — the variable name is replaced by its value. When used as text, variables can be concatenated:
$x$ = "meso"
$y$ = 5
MesoView = $x$$y$.tif
This opens a raster file named meso5.tif into a view named MesoView.
Accessing a global variable's value (not its name): surround the name with # instead of $:
$x$ = ForestSize // $x$ = "ForestSize" (the name)
$y$ = #ForestSize# // $y$ = 200 (the value, if ForestSize = 200)
Capture current directory:
$currDir$ = "."
Common uses for script variables:
- Managing input/output folder paths.
- Linking parameter settings with output folder names.
- Setting up iterative simulation runs.
- Passing input file names and paths into
.selfiles.
General Control Commands
cwd <Directory>
mkdir <Directory>
Close <ViewName>
Close All
cwd— Change the current working directory (starts as the folder containing the scenario file). Folders are created if they don't exist. Supports script variables:cwd $outputDir$\$scnDir$.mkdir— Explicitly create a directory or folder structure.Close <ViewName>— Close a specified raster view.Close All— Close all raster views and clear loaded models from memory. Useful for freeing memory between batched simulations.
System Commands
system "<Command>"
Executes any Windows system command. Example:
system "del /s harvestRate$x$.txt"
system "ren harvestRate.txt harvestRate$x$.txt"
System commands cannot return error messages (e.g. if a file delete fails because the file is open). Use with care and avoid if possible.
Conditional Commands (if statements)
if (Condition)
…
else if (Condition)
…
else
…
end
The condition is treated as a Boolean expression (result > 0 = true). The else if and else sections are optional. Example:
wildfire.sel
param1 = 1
if (outputVar > 0)
param1 = param1 + 1
else if (outputVar < 0)
param1 = param1 - 1
end
SimStart 100 1
Conditional Loops (while)
while (Condition)
…
end
Repeats commands until the condition evaluates to false. Example:
wildfire.sel
param1 = 1
outputVar = -1
while (outputVar < 0)
param1 = param1 + 1
SimStart 100
end
Ensure the condition will eventually become false. An always-true condition creates an infinite loop that requires forcibly terminating seles.exe.
Iterative Loops (for — numeric range)
for ($label$ = #n1 : #n2)
…
end
for ($label$ = #n1 : #n2, #step)
…
end
$label$ takes values n1, n1 + step, … stopping when it exceeds n2. Default step is 1. Loops can be nested. Example — run 10 simulations with $x$ = 1 through 10:
wildfire.sel
for ($x$ = 1:10)
param1 = $x$
SimStart 100 1
end
File Loops (for — wildcard)
for ($label$ = "Text*")
…
end
Iterates over all files matching the wildcard pattern. If there is exactly one *, $label$ is assigned the text matched by the wildcard. If there is more than one *, $label$ is assigned the full matching filename. Loops can be nested. Example:
wildfire.sel
for ($yr$ = "age*.tif")
StandAge = age$yr$.tif
cwd ..\age$yr$
SimStart 100 1
Close StandAge
end
2.3 How Scenario Files Are Processed
When a SimStart command is encountered, SELES runs the simulation. While the simulation is running, certain commands are blocked until it completes:
- Loading a subsequent dynamic model
- Saving rasters
- Starting another simulation
- Changing the current working directory
- Executing system commands
If such commands follow a SimStart, the command interpreter waits for the simulation to finish. During this wait, the user interface will be non-responsive (including output from DISPLAY commands in landscape events). Ensure a model runs without error before deploying it in a complex scenario.
Command Ordering Relative to .sel Files
Correct ordering of commands around the .sel file load is critical:
Before loading the dynamic model:
- Load all rasters used by the
.selfile (at least the initial conditions). - Set all script variables used in the
.selfile. Script variables set after loading will not affect the.selfile load.
When the .sel file is loaded:
- All input files (tables, legends, sub-models, macros) referenced by the
.selfile are read immediately. - All global variables and constants are defined and their initial values set.
After loading the dynamic model:
- Global variables are now defined — any changes to their initial values must be made after the
.selfile load. - Take care when changing directories: folder paths in a scenario file are relative to the current directory, while folder paths in dynamic model files are relative to the folder containing the
.selfile.