Skip to content
Snippets Groups Projects
CbmDeviceEventBuilderEtofStar2019.h 2.93 KiB
Newer Older
/**
 * CbmDeviceEventBuilderEtofStar2019.h
 *
 */

#ifndef CBMDEVICEEVENTBUILDERETOFSTAR2019_H_
#define CBMDEVICEEVENTBUILDERETOFSTAR2019_H_

#include "FairMQDevice.h"

#include "TMessage.h"
Administrator's avatar
Administrator committed
#include "Timeslice.hpp"

#include "TStopwatch.h"

class CbmStar2019EventBuilderEtofAlgo;
class CbmStar2019TofPar;

Administrator's avatar
Administrator committed
class CbmDeviceEventBuilderEtofStar2019 : public FairMQDevice {
public:
  CbmDeviceEventBuilderEtofStar2019();
  virtual ~CbmDeviceEventBuilderEtofStar2019();

  virtual Bool_t DoUnpack(const fles::Timeslice& ts, size_t component);
  virtual void Reset();
  virtual void Finish();

  void SetParContainers();

  Bool_t InitContainers();

  Bool_t ReInitContainers();

  void SetSandboxMode(Bool_t bSandboxMode = kTRUE) {
    fbSandboxMode = bSandboxMode;
  }
  void SetEventDumpEnable(Bool_t bDumpEna = kTRUE);

  /// Temp until we change from CbmMcbmUnpack to something else
  void AddMsComponentToList(size_t component, UShort_t usDetectorId);
  void SetNbMsInTs(size_t /*uCoreMsNb*/, size_t /*uOverlapMsNb*/) {};

  CbmDeviceEventBuilderEtofStar2019(const CbmDeviceEventBuilderEtofStar2019&) =
    delete;
  CbmDeviceEventBuilderEtofStar2019
  operator=(const CbmDeviceEventBuilderEtofStar2019&) = delete;

protected:
  virtual void InitTask();
  bool HandleData(FairMQMessagePtr&, int);
  bool HandleParts(FairMQParts&, int);
  bool HandleMessage(FairMQMessagePtr&, int);
  virtual bool SendEvent(std::vector<Int_t>, int);
  virtual bool SendSubevent(uint, char*, int, int);

private:
  uint64_t fNumMessages;
  /// Control flags
  Bool_t
    fbMonitorMode;  //! Switch ON the filling of a minimal set of histograms
  Bool_t
    fbDebugMonitorMode;  //! Switch ON the filling of a additional set of histograms
  Bool_t fbSandboxMode;  //! Switch OFF the emission of data toward the STAR DAQ
  Bool_t
    fbEventDumpEna;  //! Switch ON the dumping of the events to a binary file

  /// Parameters management
  TList* fParCList;

  /// Statistics & first TS rejection
  uint64_t fulTsCounter;
  uint64_t fNumEvt;

  bool CheckTimeslice(const fles::Timeslice& ts);
  bool IsChannelNameAllowed(std::string channelName);

  std::vector<std::string> fAllowedChannels             = {"tofcomponent",
                                               "parameters",
                                               "etofevts",
                                               "syscmd"};
  std::vector<std::vector<std::string>> fChannelsToSend = {{}, {}, {}};

  /// Processing algo
  CbmStar2019EventBuilderEtofAlgo* fEventBuilderAlgo;
  TStopwatch fTimer;

  CbmStar2019TofPar* fUnpackPar;  //!

  /// Event dump to binary file
  std::fstream* fpBinDumpFile;
  const UInt_t kuBinDumpBegWord = 0xFEEDBEAF;
  const UInt_t kuBinDumpEndWord = 0xFAEBDEEF;
};

// special class to expose protected TMessage constructor
Administrator's avatar
Administrator committed
class CbmMQTMessage : public TMessage {
public:
  CbmMQTMessage(void* buf, Int_t len) : TMessage(buf, len) {
    ResetBit(kIsOwner);
  }
};

#endif /* CBMDEVICEEVENTBUILDERETOFSTAR2019_H_ */