Skip to content
Snippets Groups Projects
Select Git revision
  • master
  • test
  • doxygen
3 results

INSTALL

Blame
  • TrackingDefs.h 2.10 KiB
    /* Copyright (C) 2023 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt
       SPDX-License-Identifier: GPL-3.0-only
       Authors: Sergei Zharko [committer] */
    
    /// \file   TrackingDefs.h
    /// \date   22.10.2023
    /// \brief  Definitions for tracking in the online reconstruction
    /// \author S.Zharko <s.zharko@gsi.de>
    
    #pragma once
    
    #include "CaEnumArray.h"
    
    #include <tuple>
    
    namespace cbm::algo
    {
      namespace mvd
      {
        class Hit;
      }
      namespace sts
      {
        struct Hit;
      }
      namespace much
      {
        class Hit;
      }
      namespace trd
      {
        class Hit;
      }
      namespace tof
      {
        struct Hit;
      }
    
      namespace ca
      {
        /// \enum  cbm::algo::ca::EDetectorID
        /// \brief Enumeration for the detector subsystems used in CBM online tracking
        /// \note  It is important, that the subsystems are specified in the actual order.
        /// \note  The enumeration must not contain jumps in the ordering and the first entry must be equal 0
        enum class EDetectorID
        {
          Mvd = 0,
          Sts,
          Much,
          Trd,
          Tof,
          kEND  ///< End of enumeration
        };
    
        /// \brief  Alias to array, indexed by the EDetectorID enum
        /// \note   To be used only in CBM-specific code
        template<typename T>
        using DetIdArray_t = EnumArray<EDetectorID, T>;
    
        /// \struct DetIdTypeArr_t
        /// \brief  Array of types, indexed by EDetectorID
        template<class... Types>
        struct DetIdTypeArr_t {
          template<EDetectorID DetID>
          using at                          = std::tuple_element_t<static_cast<std::size_t>(DetID), std::tuple<Types...>>;
          static constexpr std::size_t size = sizeof...(Types);
        };
    
        /// \brief Hit vector types
        using MvdHit     = ::cbm::algo::mvd::Hit;
        using StsHit     = ::cbm::algo::sts::Hit;
        using MuchHit    = ::cbm::algo::much::Hit;
        using TrdHit     = ::cbm::algo::trd::Hit;
        using TofHit     = ::cbm::algo::tof::Hit;
        using HitTypes_t = DetIdTypeArr_t<MvdHit, StsHit, MuchHit, TrdHit, TofHit>;
    
        /// \brief Detector subsystem names
        constexpr DetIdArray_t<const char*> kDetName = {{"MVD", "STS", "MUCH", "TRD", "TOF"}};
    
      }  // namespace ca
    }  // namespace cbm::algo