Enable DOCA to accept not just two indices and one object, but also two objects for 2025-patches
Cherry-pick of !4562 (merged) by @graven
Original description:
Add a template specialization to Doca, SDoca, DocaChi2 and SDocaChi2 which instead of using indices to obtain which items to use from a single argument (typically a particle combination, or composite particle), requires two arguments whose result will be used directly instead. These arguments can be obtained by binding other functors to these arguments, thus decoupling the navigation and selection from the actual computation.
As a result, eg. DOCA(I,J) can also be written as DOCA( CHILD(I), CHILD(J) ), where it is recognized that the arguments are not indices, in which case it is mapped to DOCA(-1,-1).bind( CHILD(I), CHILD(J) ), where the use of -1,-1 as indices is used as 'sentinel' to select the specialization requiring two arguments. However, this may affect compile times, so should only be used in situations where a more complicated navigation is required.
For example, given a decay X -> ( Y -> A B )( Z -> C D ) one can now do F.DOCA( F.CHILD(2) @ F.CHILD(1), F.CHILD(1) @ F.CHILD(2) ) which will compute the doca between B (i.e. the F.CHILD(2)@F.CHILD(1), i.e. the second child of Y, which is the first child of the X ) and C (i.e. the F.CHILD(1)@F.CHILD(2), i.e. the first child of the Z which is the second child of the X ).
see this request