Implement the classificiation functions for particles in Athena

Merged Andrii Verbytskyi requested to merge averbyts/athena:nohep into 23.0

Formally the PDG classification functions in Athena were those supplied by the MCUtils package. However, as those functions have severe issues and the fixes are not foreseen by the author in the next months i.e. the codes will not be updated in the next ~6 months it to take into account the LCG release cycle.

This MR implements the PDG classification functions in one header AtlasPID.h.

  • The functions are implemented as templates.
  • The functions should be faster than the functions in MCUtils. And least the synthetic tests show it is the case.
  • Some physics issues in the functions are fixed.
  • The emphasis in the implementation is made on the SM physics, some functions present in MCUtils, but might lead to ambiguities are not implemented on purpose.
  • The header is tested separately against the MCUtils.
  • MCUtils/HEPUtils are not needed in Athena.

@jchapman @pclark

The list of issues in MCUtils:

    1. The isChargedLepton() is not an equivalent for isLepton()&&isCharged()
    1. Graviton is defined as BSM particle. I'm not sure this is desirable in Athena. Maybe other people know.
    1. Some invalid particles probably will pass isMeson() isBaryon(), isHadron() selectors.
    1. The doubly charged Higgs++ boson with PDG id=38 is consided standard model particle, i.e. isBSM(38) = false.
    1. The definiton of Higgs boson is PDG ID=25 or PDG ID=26. Again, I'm not sure this is desirable in Athena. Maybe other people know.
    1. Some particles will pass isDiquark() even if there is no such diquarks, e.g. isDiquark(1101)== true.
    1. The tetraquarks are absent as a class.
    1. The Z0 is aparently not a EM interactiong, while the photon is.
    1. The range of the generator specific particles differ significantry from the PDG
    1. The definition of the strong interacting particles does not include e.g. diquarks and leptoquarks.
    1. All the functions hasUp/hasDown/etc don't work on Diquarks, e.g. for Diquarks like 5401 hasBottom and hasCharm are false.
    1. The charges of nuclei are not calculated.
Edited by Andrii Verbytskyi

Merge request reports