|
<< Click to Display Table of Contents >> Navigation: General > Recursive processing |
Recursive processing is a container module that applies a sequence of child processing steps to the same seismic gather repeatedly, using the output of one iteration as the input for the next. This enables iterative refinement workflows — for example, running multiple passes of velocity analysis, residual statics computation, or noise attenuation until the data converges to a desired quality level.
At the start of each iteration, the module passes the current gather to the child processing flow. After all child steps complete, the result gather is fed back as the starting gather for the next iteration. The module tracks each iteration's output, which can be visualised in the viewer to inspect how the data evolves across iterations. Processing stops automatically after the configured number of iterations, or earlier if an error occurs and the stop-on-error option is enabled.
Use this module whenever a processing algorithm must be applied in multiple passes where each pass builds upon the results of the previous one. It is especially useful in inversion workflows, adaptive filtering, and iterative residual correction schemes.
The input data item provides the seismic dataset context (project geometry, trace header definitions, SEG-Y file handle) that is shared across all iterations. This item is supplied automatically by the processing flow and does not require manual configuration.
The seismic gather that enters the iterative loop. On the first iteration, child modules receive this original gather as their input. The gather is preserved internally and is never overwritten, so the algorithm always starts from a clean copy of the original data at iteration one.
The gather produced by the child processing flow at the end of each iteration. This gather is automatically fed back as the input gather for the next iteration, forming the recursive loop. After all iterations complete, the final state of this gather becomes the output of the entire module. Connect the last child module's output to this item to close the loop correctly.
Specifies the total number of times the child processing sequence will be executed on each gather. Default value is 1, which runs the child flow exactly once (no recursion). Set this to a larger integer to enable true iterative processing. For example, setting it to 5 will run the child sequence five times, each time starting from the output of the previous pass. Increasing the iteration count improves convergence in adaptive algorithms but also increases total computation time proportionally.
This group contains fine-grained controls for the iteration loop. These settings let you restrict the loop to a sub-range of iterations, step through iterations at intervals, enable automatic counter increments, control error handling behaviour, and introduce a playback delay for animated visualisation of results.
A read-only display counter that shows the index of the currently executing iteration (starting from 1). This value is automatically updated by the module during execution and can be monitored in the interface to track processing progress. Child modules that need to vary their behaviour per iteration can reference this value through parameter expressions or trigger conditions.
Sets the starting iteration index for the loop. Default is 1 (the first iteration). Increasing this value causes the module to skip earlier iterations and begin the loop at the specified index. This is useful when re-running a partially completed workflow or when warm-starting from a specific intermediate state. The value is constrained to the range [1, Number of iterations].
Sets the ending iteration index for the loop. By default this is automatically set to the value of Number of iterations. Reducing this value stops the loop early, before all configured iterations are completed. Together with First seq. gather, this lets you execute only a specific sub-range of the total iteration count. The value is constrained to the range [1, Number of iterations].
Defines the step size between consecutive iterations. Default is 1, meaning every iteration in the range [First, Last] is executed. Setting this to 2 runs only every second iteration (e.g., iterations 1, 3, 5, ...). This can be useful for coarse-to-fine strategies where initial passes use large steps and later passes use finer steps.
When enabled (default: on), the Sequential gather number counter is automatically incremented by the Seq. gather increment value at the end of each iteration. Disable this option only if a child module manages the iteration counter explicitly — in most workflows, leave this enabled.
Controls the behaviour when a child module returns an error during an iteration. When set to on (default), the entire loop is aborted immediately if any iteration fails, and the error is propagated. When set to off, the loop continues to the next iteration even if the current one encountered a problem. Use the off setting only when failures on individual iterations are expected and recoverable, and the final result is still meaningful.
Introduces a pause (in seconds) between consecutive iterations. Default is 0 seconds (no delay). When a non-zero value is set, the module waits for the specified duration after each iteration before starting the next one. This is designed for animated display of iteration-by-iteration results in the viewer — setting a delay of 0.5 to 2 seconds allows you to watch how the gather evolves with each pass, which is useful for quality control and presentations. Set to 0 for production runs where speed is important.