Skip to content
Snippets Groups Projects
Select Git revision
  • f875e51e726501b931142b63a3fc1e2bc8951c9b
  • master default protected
  • nightly_master
  • online_much_readconf_cleanup protected
  • online_mvd_readconf_cleanup protected
  • jul25_patches
  • cleanup_rich_v25a
  • jul24_patches
  • nov23_patches
  • DC_2404
  • nighly_master
  • DC_Jan24
  • DC_Nov23
  • DC_Oct23
  • feb23_patches
  • L1Algo-dev9
  • dec21_patches protected
  • apr21_patches protected
  • dev_2025_47
  • RC2_jul25
  • dev_2025_46
  • dev_2025_45
  • dev_2025_44
  • dev_2025_43
  • dev_2025_42
  • dev_2025_41
  • dev_2025_40
  • dev_2025_39
  • dev_2025_38
  • dev_2025_37
  • dev_2025_36
  • dev_2025_35
  • dev_2025_34
  • dev_2025_33
  • dev_2025_32
  • dev_2025_31
  • dev_2025_30
  • RC_jul25
38 results

Clusterizer.cxx

Blame
  • DigiData.h 3.11 KiB
    /* Copyright (C) 2023 FIAS Frankfurt Institute for Advanced Studies, Frankfurt / Main
       SPDX-License-Identifier: GPL-3.0-only
       Authors: Felix Weiglhofer [committer] */
    #ifndef CBM_ALGO_BASE_DIGI_DATA_H
    #define CBM_ALGO_BASE_DIGI_DATA_H
    
    #include "CbmBmonDigi.h"
    #include "CbmDigiData.h"
    #include "CbmDigiEvent.h"
    #include "CbmEventTriggers.h"
    #include "CbmFsdDigi.h"
    #include "CbmMuchDigi.h"
    #include "CbmPsdDigi.h"
    #include "CbmRichDigi.h"
    #include "CbmStsDigi.h"
    #include "CbmTofDigi.h"
    #include "CbmTrdDigi.h"
    #include "PODVector.h"
    
    namespace cbm::algo
    {
      /**
       * @brief Collection of digis from all detector systems
       *
       * Very similar to CbmDigiData. CbmDigiData is meant for file storage,
       * while this is used for the actual processing. Seperate classes
       * allow for more flexibility and easier optimization.
       *
       * @see CbmDigiData
       * @note Uses PODVector for storage, so memory is not initialized by default.
       */
      struct DigiData {
        PODVector<CbmStsDigi> fSts;    ///< Unpacked STS digis
        PODVector<CbmMuchDigi> fMuch;  ///< Unpacked MUCH digis
        PODVector<CbmTofDigi> fTof;    ///< Unpacked TOF digis
        PODVector<CbmBmonDigi> fBmon;  ///< Unpacked Bmon digis
        PODVector<CbmTrdDigi> fTrd;    ///< Unpacked TRD digis
        PODVector<CbmTrdDigi> fTrd2d;  ///< Unpacked TRD2D digis
        PODVector<CbmRichDigi> fRich;  ///< Unpacked RICH digis
        PODVector<CbmPsdDigi> fPsd;    ///< Unpacked PSD digis
        PODVector<CbmFsdDigi> fFsd;    ///< Unpacked FSD digis
    
        DigiData();
        ~DigiData();
    
        explicit DigiData(const CbmDigiData& storable);
    
        /**
         * @brief Get the number of digis for a given subsystem
         *
         * @param system Subsystem to get the number of digis for
         * @todo Should use fles::Subsystem instead ECbmModuleId
         */
        size_t Size(ECbmModuleId system) const;
    
        /**
         * @brief Get the total number of digis across all subsystems.
         */
        size_t TotalSize() const;
    
        /**
         * @brief Get the total number of bytes used by all digis.
         */
        size_t TotalSizeBytes() const;
    
        /**
         * @brief Convert to CbmDigiData for file storage
         *
         * @note This is a very expensive operation, as it copies all data.
         */
        CbmDigiData ToStorable() const;
      };
    
      /**
       * @brief Event data with event number and trigger time
       *
       * @see CbmDigitEvent
       * @note Uses PODVector for storage, so memory is not initialized by default.
       */
      struct DigiEvent : public DigiData {
        // FIXME: Event number not set yet!
        uint64_t fNumber = -1;  ///< Event identifier
        double fTime     = 0;   ///< Event trigger time [ns]
        CbmEventTriggers fSelectionTriggers;
    
        static std::vector<DigiEvent> FromCbmDigiEvents(const std::vector<CbmDigiEvent>& events);
        static std::vector<CbmDigiEvent> ToCbmDigiEvents(const std::vector<DigiEvent>& events);
    
        DigiEvent() = default;
    
        explicit DigiEvent(const CbmDigiEvent& storable);
    
        /**
       * @brief Convert to CbmDigiEvent for file storage
       *
       * @note This is a very expensive operation, as it copies all data.
       */
        CbmDigiEvent ToStorable() const;
      };
    
    }  // namespace cbm::algo
    
    #endif  // CBM_ALGO_BASE_DIGI_DATA_H