A module looping over a set of solutions.
A loop is done over the set of solution. For each solution, the outputs are filled with the list of particles and the jacobian, and the modules of the path are executed. At least one module must use the output produced by this module.
If the path is executed, the solution is ensured to be valid.
In details
Each blocks produce a set of solutions. In order to define the final integrand value, various computations (matrix element, initial state, …) must be performed on each solution. Letting each module handling multiple solutions, but it leads to many problems, the biggest one being the synchronization between modules: a solution can be seen as valid from a module, but not for another. Instead, each module only handles a set of particle, without the necessity to know where it comes from (input particle or solution of a block), and the iteration over the solutions is delegated to this Looper module. For each solution, a sequence of module is executed, as described by the path
argument.
Schematically, things can be represented by this graph:
───────
Block
───┬───
│
├─ Solutions
│
───┴────
─┬────┬─
│ │
│ │
│ ──┴─────
│ ──┬─────
│ │
│ │
│ ──┴─────
│ ──┬─────
│ │
└─┬──┘
│
───┴───
───┬───
Integration dimension
This module requires 0 phase-space point.
Parameters
Name | Type | Description |
path | Path | An execution path. For each solution, each module of the path will be executed in order. |
Inputs
Name | Type | Description |
solutions | vector(Solution) | The set of solutions to iterate over. It's usually the output of one of the blocks. |
Outputs
Name | Type | Description |
particles | vector(LorentzVector) | The particles of the current solution. This output only makes sense for a module inside the execution path. For any other module, this output is invalid. |
jacobian | double | The jacobian of the current solution. This output only makes sense for a module inside the execution path. For any other module, this output is invalid. |
Definition at line 113 of file Looper.cc.