Newer
Older
/* 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 "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
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
*/
/**
* @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.
*/
};
/**
* @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);
explicit DigiEvent(const CbmDigiEvent& storable);
/**
* @brief Convert to CbmDigiEvent for file storage
*
* @note This is a very expensive operation, as it copies all data.
*/
};
} // namespace cbm::algo
#endif // CBM_ALGO_BASE_DIGI_DATA_H