Source Scheduling #5: Source Paths

Click to Print


A Source Path is the primary set of source scheduling instructions for a particular piece of Equipment. They control which Leaves are worked and in what order, as well as controlling the behaviour of equipment when it is unable to complete those defined instructions.

The power of Source Paths lies in their ability to be as broad or as specific as required. The simplest Source Path to schedule an entire mine is a single character, whereas the most complex Source Path is capable of having more lines than the total number of Leaves. Understanding how to control this flexibility is the focus of this section.

Look at the table breakdown below which will be used for all of the examples in this section:


In the example above there are 25,600 possible Leaves (Demo/1/1/1/A/20, Demo/1/1/1/A/25 etc.) and if you choose to, you can individually write each line into your Source Path. This is highly inefficient and also error prone, so Spry allows you to group parts of your Source Path using two major tools, Wildcard (*) and Span (-). Spry then breaks each line apart into individual lines for you depending on the way they are written.

Wildcard *

As mentioned above, the simplest Source Path is a single character, the Wildcard *. There are two forms of the Wildcard:

  • Explicit: Written in the Source Path (e.g. Demo/1/5/5/A/* will work every Bench in the Demo Pit -> Stage 1 -> Strip 5 -> Block 5 -> Seam A)
  • Implicit: Any incomplete Source Path has implied Wildcards behind it (e.g. Demo/1/5/5/A is the same as the Demo/1/5/5/A/* above)

The order in which a Wildcard is worked is dependent on the Index of the Position (see this section). By default, a Wildcard works from the zero Index towards the highest Index. You can reverse this by putting the minus symbol (-) in front of the Wildcard.

Default Wildcard Reverse Wildcard
Demo/1/1/1/A/* Demo/1/1/1/A/-*
Breaks down to Breaks down to
Demo/1/1/1/A/20 Demo/1/1/1/A/95
Demo/1/1/1/A/25 Demo/1/1/1/A/90
Demo/1/1/1/A/30 Demo/1/1/1/A/85
Demo/1/1/1/A/35 Demo/1/1/1/A/80
Demo/1/1/1/A/40 Demo/1/1/1/A/75
Demo/1/1/1/A/45 Demo/1/1/1/A/70
Demo/1/1/1/A/50 Demo/1/1/1/A/65
Demo/1/1/1/A/55 Demo/1/1/1/A/60
Demo/1/1/1/A/60 Demo/1/1/1/A/55
Demo/1/1/1/A/65 Demo/1/1/1/A/50
Demo/1/1/1/A/70 Demo/1/1/1/A/45
Demo/1/1/1/A/75 Demo/1/1/1/A/40
Demo/1/1/1/A/80 Demo/1/1/1/A/35
Demo/1/1/1/A/85 Demo/1/1/1/A/30
Demo/1/1/1/A/90 Demo/1/1/1/A/25
Demo/1/1/1/A/95 Demo/1/1/1/A/20


Span –

The Span character is used to define a range of positions in a Source Path. This differs from a Wildcard in that you are required to set the start and end of the range, which also sets the order it breaks down.

For example, the Source Path Demo/1/5/5/A/95-75 breaks down in the opposite order of Demo/1/5/5/A/75-95

Demo/1/1/1/A/95-75 Demo/1/1/1/A/75-95
Breaks down to Breaks down to
Demo/1/1/1/A/95 Demo/1/1/1/A/75
Demo/1/1/1/A/90 Demo/1/1/1/A/80
Demo/1/1/1/A/85 Demo/1/1/1/A/85
Demo/1/1/1/A/80 Demo/1/1/1/A/90
Demo/1/1/1/A/75 Demo/1/1/1/A/95



What happens if you have more than one Wildcard or Span?

Let’s say you were looking at a Source Path line that read Demo/1/1/1/A-B/95-90. There are only 4 Leaves, but the order in which Spry will process them can vary. The default order is to work ALL lower Level Positions before working a Level above. What does this look like?

Breaks down to

Another way to think about it is that this is similar to if you took your raw data in Excel and applied a Sort (Excel screenshot below). The Source Path line itself filters what is present and the Order determines how the Wildcards are sorted.


There are ways to control this Order and this is addressed below in the Practical section. There are also many other simple tools that you can use to control your Source Path. The most important thing to note is that even though you may not write every single Leaf individually in your Source Path (and we wouldn’t recommend that you do) Spry will break them down. The combination of Position Indexes, Wildcards, Spans and Order are core concepts you require an understanding of.


Source Paths are written in the Source Path tab under each piece of Equipment.


You can quickly add several path elements through the right-click menu.


Source paths are both case and white space insensitive and the path can be built up over multiple lines with each line adding more steps to the path. This section will build a simple example Source Path that uses the full variety of options available to you.

The Basics

The simplest Source Path possible is a single wildcard asterisk (‘*’) character which tells equipment to work logically lowest index to highest (refer to your Source table Setup Levels) and all sub levels are completed before moving to the next index.


Paths are built up in a similar structure as ranges with each level of the table separated by slashes (either ‘/’ or ‘\’). For each level, a subset of positions for that level can be generated. These can either be a span of positions between two ends (e.g. ’1-5′), individual positions (e.g. ’1,2,3,4,5′) or a combination of both (’1-2,3,4-5′). To select every position for a level, the asterisk (‘*’) character can be used as a wildcard (or ‘-*’ to include all positions in reverse order). If any level is omitted, it is assumed that all positions of lower levels are included (e.g. ‘A’ is equivalent to ‘A\*\*\*’, although ‘A\’ would create no steps as nothing has been specified for the second level).


Processes: <“Processes”>

<Processes> is a comma separated list of what procceses will be used. As a individual line Processes: (Source Path Only) limits the processes that will be included in subsequent lines of the path (unless overridden on an individual line). Multiple processes can be included by comma separating them.

Demo\Stage 1\*\1-5,7\*\* <Blasted, Freedig>


 Processes: Blasted, Freedig
 Demo\Stage 1\*\1-5,7\*\*

Default (if not explicit): All Processes

Prefix: “Node Prefix”

<Node Prefix> will be prefixed to all subsequent lines that describe a node or nodes

 Prefix: Demo\Stage 1\
 *\1-5,7\*\* <Blasted, Freedig>

Default (if not explicit): None

Order: “NodeOrder”

The order defines the order the schedule loops through the levels to generate the individual tasks the equipment should follow. Changing the order can have a significant impact to the path of the equipment.

Node order must have the same names as defined in levels on the table it is defined in and is \ separated. Not all levels have to be used, but no level can be used more than once. This will override the default order set in your Source Table Fields

Processes can be used in node orders. This can be very useful in by-seam mining, in models where both commodity and waste are benched. The order within the Processes is set the same way described above in <Processes>

 Prefix: Demo\Stage 1\
 Order: Pit\Stage\Bench\Seam\Strip\Block
 *\1-5,7\*\* <Waste, Coal>

Default (if not explicit): Levels in default order from zero Index

AllowAdvance: “On/Off”

If turned ‘On’ or set to ‘True’, allows the schedule to look further down the path to find the first tasks that is available (or until Allow Advance is set to ‘Off’ or ‘False’). Only has an effect when Dependencies are set.

 Prefix: Demo\Stage 1\
 Order: Mine\Pit\Strip\Stage\Sub Block\Sub Strip\Bench
 AllowAdvance: On
 *\1-5,7\*\* <Blasted>

Default (if not explicit): Off


Time delays can be specified using the format ‘Time Delay: TimeDelay TimeUnits <NonProductiveProcess>’ where TimeDelay is a number specifying how long the delay should occur for, TimeUnits is unit of time that the TimeDelay is measured in and NonProductiveProcess in the name of a non productive process to use for the delay (e.g. ‘Time Delay: 6 hours <Relocation>’). Valid time units are ‘Minutes’, ‘Hours’, ‘Days’ or ‘Weeks’.

Date delays can be specified using the format ‘Date Delay: DelayToDate <NonProductiveProcess>’ where DelayToDate is text that describes the date to delay until (in the format of the user’s region settings) and NonProductiveProcess in the name of a non productive process to use for the delay (e.g. ‘Date Delay: 1/1/2016 <Delayed Start>’)

 Prefix: Demo\Stage 1\
 Order: Mine\Pit\Strip\Stage\Sub Block\Sub Strip\Bench
 AllowAdvance: On
 *\1-5,7\*\* <Blasted>
 Date Delay: 1/1/2016 <Maintenance>
 Time Delay: 5 hours <Relocation>

Amount ‘( )’

Allows for only a portion of a task to be scheduled (e.g. ‘A\15 (50%)’ or ‘A\15 (0.5)’). Can also be used with = Modifiers (see below).

 Prefix: Demo\Stage 1\
 Order: Mine\Pit\Strip\Stage\Sub Block\Sub Strip\Bench
 AllowAdvance: On
 *\1-5,7\*\* <Blasted>[80%] (50%)
 Date Delay: 1/1/2016 <Maintenance>
 Time Delay: 5 hours <Relocation>

Default (if not explicit): 100%

Rate ‘[ ]‘ (Source Path Only)

Overrides the rate of the equipment by multiplying it by this factor when scheduling these tasks (e.g. ‘A\15 [50%]‘ or ‘A\15 [0.5x]‘). Can also be used with = Modifiers (see below).

 Prefix: Demo\Stage 1\
 Order: Mine\Pit\Strip\Stage\Sub Block\Sub Strip\Bench
 AllowAdvance: On
 *\1-5,7\*\* <Blasted>[80%]
 Date Delay: 1/1/2016 <Maintenance>
 Time Delay: 5 hours <Relocation>

Default (if not explicit): 100%

Rate and Equipment Count [#/#] (Source Path Only)

Similar to Rate but adds a second number to multiply the Equipment Count. Can also be used with = Modifiers (see below).

Modifiers ‘=’

Used for Amounts, Rate and Equipment Count. Changes their effect from a factor/percentage to a hard-coded number. Note: If a Modified Amount is greater than 100% of the available Source Quantity in that leaf, the actual Amount will be 100%.

 Prefix: Demo\Stage 1\
 Order: Mine\Pit\Strip\Stage\Sub Block\Sub Strip\Bench
 AllowAdvance: On
 *\1-5,7\*\* <Blasted>[=1000/=2] 'A Modified Rate of 1000/hour, Modified Equipment Count of 2
 Alpha\S1\B1\D\100 (=5000) 'A Modified Amount of 5000 (Source Quantity units)
 Date Delay: 1/1/2016 <Maintenance>
 Time Delay: 5 hours <Relocation>

InRange and NotInRange: Range Name

Allows for only Tasks in (or not in) a Range to be included in instructions to Equipment. Affects subsequent lines in the Path until overridden by another InRange or NotInRange. Can be reset with a Wildcard e.g. InRange: *

 Prefix: Demo\Stage 1\
 Order: Mine\Pit\Strip\Stage\Sub Block\Sub Strip\Bench
 AllowAdvance: On
 InRange: Stage 1\Lower
 *\1-5,7\*\* <Blasted>[80%] (50%)
 Date Delay: 1/1/2016 <Maintenance>
 Time Delay: 5 hours <Relocation>

Path Arrays

Path arrays allow for multiple lines to be combined into a single line paths. The arrays are specified between {} characters with semi-colons (;) delimiting entries. For example:

A\{1-3;2,4;1}\2-5\{300;280;260}-{290;270;250} [0.9x] ; B\{1-3;2,4;1;5}\2-5\{300;290;280;270} <Coal Mining> ; C\1\1\408

gets expanded to:

A\1-3\2-5\300-290 [0.9x]
 A\2,4\2-5\280-270 [0.9x]
 A\1\2-5\260-250 [0.9x]
 B\1-3\2-5\300 <Coal Mining>
 B\2,4\2-5\290 <Coal Mining>
 B\1\2-5\280 <Coal Mining>
 B\5\2-5\270 <Coal Mining>

The number of items in each array for a path must be the identical. Hovering the mouse over an arrayed line shows the expanded version of it.

Arrays can be used in the Node Paths themselves, but also to in-line <Processes>, (Percentages) and [Rates]. A more comprehensive description of Arrays is covered in the next section on Dependencies where they will be used more frequently.

Demo\2\*\-*\*\{1:@0..@-1#2} <{2:Waste; Coal}> ({2:50%;100%}) [{2:0.9x;0.8x}]

Equipment Path Tool

Introduced in Spry 1.2, the Animation Window Design tab gives access to an interactive Equipment Path tool equipment-paths which will remove solids as you select them and add them to the Equipment Path.
Once selected, there are three options regarding how you interact with the Animation Window.

  1. simple-mode Simple Mode: Individual Solid selection adds one by one with each left-click
  2. range-mode Range Mode: Add multiple Solids in and between first and second left-click
  3. surface-intersection  Surface Intersection Mode: Adds any Solids that intersect the line created by two left-clicks

In addition each line of the Equipment Path selected in this window is represented in the Animation window with a coloured group (default pink) and you can select multiple lines to see the sum total of the effect.
Finally when finished right-click to exit the tool.

Intelligent Code Completion

If you’ve ever done coding before, you might be familiar with the term Intelligent Code Completion (ICC), or you may know of it as IntelliSense. Spry Scripting has had this for a while, but introduced in Spry is the ability to use ICC in building your Source Paths as well! You’ll notice that Spry provides a contextual list of possible options depending on what you typed before it so the slashes (/ or \) will give you a list of Positions whereas tools like Process: and Allow Advance: will give you relevant options.


Want to start ICC without having to add anything to the Source Path? Hitting the Ctrl + Space buttons on your keyboard will activate it as well.