The core building block of a trajectory is the loop. A loop defines a series of points to visit and is not restricted to scanning a single motor/device. Loops are defined using the following three systems:
Note: List, range, and expression names represent both a node on the system and a set of calculated values. As such, the name allows for the set of values to be applied to an actual node in NICE, such as <motor device>.softPosition, but also be applied elsewhere in the trajectory, such as in an expression.
A trajectory can use multiple loops, either by generating them sequentially or within one another (see Nested Loops). Generating loops sequentially means that one loop must fully complete all its iterations before the trajectory can begin iterating over the next loop, which is called the sub-loop. The sub-loop is at the same level of indentation as the preceding loop.
VERY IMPORTANT:
The list, range, and expression names throughout a trajectory’s loops must be consistent. This includes case-sensitivity: when referencing lists, ranges, and expressions in a trajectory, you can use any case; however, the case must remain consistent throughout the given trajectory.