Skip to content
Snippets Groups Projects
CbmTaskUnpackXpu.h 1.93 KiB
/* Copyright (C) 2023 Facility for Antiproton and Ion Research in Europe, Darmstadt
   SPDX-License-Identifier: GPL-3.0-only
   Authors: Dominik Smith [committer] */


#ifndef CBMTASKUNPACKXPU_H
#define CBMTASKUNPACKXPU_H 1

#include "CbmDefs.h"
#include "CbmDigiTimeslice.h"

#include <FairTask.h>

#include <sstream>
#include <vector>

#include "EventBuilder.h"
#include "sts/StsReadoutConfigLegacy.h"
#include "sts/UnpackStsXpu.h"


class CbmDigiManager;
class CbmSourceTs;


/** @class CbmTaskUnpackXpu
 ** @brief Task class for associating digis to events
 ** @author Volker Friese <v.friese@gsi.de>
 ** @since 15.11.2021
 **
 ** Creates objects of class CbmDigiEvent and fills them with digi objects,
 ** using the algorithm EventBuilder.
 **
 ** TOFO: The current implementation is for STS only and with a dummy trigger list
 ** just to establish the framework integration of algorithm and data interfaces.
 **/
class CbmTaskUnpackXpu : public FairTask {


public:
  /** @brief Constructor **/
  CbmTaskUnpackXpu();


  /** @brief Copy constructor (disabled) **/
  CbmTaskUnpackXpu(const CbmTaskUnpackXpu&) = delete;


  /** @brief Destructor **/
  virtual ~CbmTaskUnpackXpu();


  /** @brief Task execution **/
  virtual void Exec(Option_t* opt);


  /** @brief Finish timeslice **/
  virtual void Finish();


  /** @brief Assignment operator (disabled) **/
  CbmTaskUnpackXpu& operator=(const CbmTaskUnpackXpu&) = delete;


private:  // methods
  /** @brief Task initialisation **/
  virtual InitStatus Init();

private:  // members
  CbmSourceTs* fSource = nullptr;

  cbm::algo::UnpackStsXpu fAlgoStsXpu;
  cbm::algo::StsReadoutConfigLegacy fStsConfig {};

  size_t fNumTs                = 0;
  size_t fNumMs                = 0;
  size_t fNumBytes             = 0;
  size_t fNumDigis             = 0;
  double fTime                 = 0.;
  CbmDigiTimeslice* fTimeslice = nullptr;  ///< Output data

  ClassDef(CbmTaskUnpackXpu, 1);
};

#endif /* CBMTASKUNPACKXPU_H */