Skip to content

GPU Calorimeter Reconstruction: moments fully working

Some updates that came up while waiting for !61869 (merged).

  • GPU calculated moments now fully agree with the CPU implementation (up to floating point accuracy).
    • The issue was in the sorting of the clusters by ET, which did not fulfil the preconditions for std::sort (due to not being a total ordering).
  • Ported CENTER_LAMBDA calculation to GPU
    • Built a (sampling, η, φ) to cell map (see EtaPhiMapEntry and EtaPhiToCellMap from CaloRecGPU/ConstantInfoDefinitions.h).
      • Results consistent with the CPU equivalent (which searches through all cells...) for all the cluster centroids in the ttbar sample
      • There might be some edge cases left, but implementation should be sound.
    • Deduced a non-trigonometric expression to calculate η from cartesian coordinates (see lines 1651 to 1682 of src/GPUClusterInfoAndMomentsCalculatorImpl.cu). It is mathematically equivalent, so only potential floating point accuracy differences might remain.
  • Implemented a faster alternative to LArHVFraction::getLArHVFrac by taking advantage of the cycle that we must do anyway through all cells during GPU to Athena structures conversion.
    • This must remain CPU-based since it makes memory accesses to things that are not needed elsewhere on the GPU code, so it makes no sense to export them (as it stands now, at least).
  • Added support for fast exporting/importing in the case where the cell collection is not full but the missing cells are known (which is our use case), by explicitly adding them back during conversion.

Merge request reports