Skip to content

Enable F.DOCA to accept not only two indices and one argument, but also two arguments

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

Edited by Gerhard Raven

Merge request reports

Loading